Annotation of embedaddon/strongswan/src/libstrongswan/utils/process.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2014 Martin Willi
        !             3:  * Copyright (C) 2014 revosec AG
        !             4:  *
        !             5:  * This program is free software; you can redistribute it and/or modify it
        !             6:  * under the terms of the GNU General Public License as published by the
        !             7:  * Free Software Foundation; either version 2 of the License, or (at your
        !             8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
        !             9:  *
        !            10:  * This program is distributed in the hope that it will be useful, but
        !            11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        !            13:  * for more details.
        !            14:  */
        !            15: 
        !            16: /**
        !            17:  * @defgroup process process
        !            18:  * @{ @ingroup utils
        !            19:  */
        !            20: 
        !            21: #ifndef PROCESS_H_
        !            22: #define PROCESS_H_
        !            23: 
        !            24: #include <utils/utils.h>
        !            25: 
        !            26: typedef struct process_t process_t;
        !            27: 
        !            28: /**
        !            29:  * Child process spawning abstraction
        !            30:  */
        !            31: struct process_t {
        !            32: 
        !            33:        /**
        !            34:         * Wait for a started process to terminate.
        !            35:         *
        !            36:         * The process object gets destroyed by this call, regardless of the
        !            37:         * return value.
        !            38:         *
        !            39:         * The returned code is the exit code, not the status returned by waitpid().
        !            40:         * If the program could not be executed or has terminated abnormally
        !            41:         * (by signals etc.), FALSE is returned.
        !            42:         *
        !            43:         * @param code  process exit code, set only if TRUE returned
        !            44:         * @return              TRUE if program exited normally through exit()
        !            45:         */
        !            46:        bool (*wait)(process_t *this, int *code);
        !            47: };
        !            48: 
        !            49: /**
        !            50:  * Spawn a child process with redirected I/O.
        !            51:  *
        !            52:  * Forks the current process, optionally redirects stdin/out/err to the current
        !            53:  * process, and executes the provided program with arguments.
        !            54:  *
        !            55:  * The process to execute is specified as argv[0], followed by the process
        !            56:  * arguments, followed by NULL. envp[] has a NULL terminated list of arguments
        !            57:  * to invoke the process with.
        !            58:  *
        !            59:  * If any of in/out/err is given, stdin/out/err from the child process get
        !            60:  * connected over pipe()s to the caller. If close_all is TRUE, all other
        !            61:  * open file descriptors get closed, regardless of any CLOEXEC setting.
        !            62:  *
        !            63:  * A caller must close all of the returned file descriptors to avoid file
        !            64:  * descriptor leaks.
        !            65:  *
        !            66:  * A non-NULL return value does not guarantee that the process has been
        !            67:  * invoked successfully.
        !            68:  *
        !            69:  * @param argv         NULL terminated process arguments, with argv[0] as program
        !            70:  * @param envp         NULL terminated list of environment variables
        !            71:  * @param in           pipe fd returned for redirecting data to child stdin
        !            72:  * @param out          pipe fd returned to redirect child stdout data to
        !            73:  * @param err          pipe fd returned to redirect child stderr data to
        !            74:  * @param close_all    close all open file descriptors above 2 before execve()
        !            75:  * @return                     process, NULL on failure
        !            76:  */
        !            77: process_t* process_start(char *const argv[], char *const envp[],
        !            78:                                                 int *in, int *out, int *err, bool close_all);
        !            79: 
        !            80: /**
        !            81:  * Spawn a command in a shell child process.
        !            82:  *
        !            83:  * Same as process_start(), but passes a single command to a shell, such as
        !            84:  * "sh -c". See process_start() for I/O redirection notes.
        !            85:  *
        !            86:  * @param envp         NULL terminated list of environment variables
        !            87:  * @param in           pipe fd returned for redirecting data to child stdin
        !            88:  * @param out          pipe fd returned to redirect child stdout data to
        !            89:  * @param err          pipe fd returned to redirect child stderr data to
        !            90:  * @param fmt          printf format string for command
        !            91:  * @param ...          arguments for fmt
        !            92:  * @return                     process, NULL on failure
        !            93:  */
        !            94: process_t* process_start_shell(char *const envp[], int *in, int *out, int *err,
        !            95:                                                           char *fmt, ...);
        !            96: 
        !            97: #endif /** PROCESS_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>