Home | History | Annotate | Download | only in util
      1 #ifndef __PERF_RUN_COMMAND_H
      2 #define __PERF_RUN_COMMAND_H
      3 
      4 enum {
      5 	ERR_RUN_COMMAND_FORK = 10000,
      6 	ERR_RUN_COMMAND_EXEC,
      7 	ERR_RUN_COMMAND_PIPE,
      8 	ERR_RUN_COMMAND_WAITPID,
      9 	ERR_RUN_COMMAND_WAITPID_WRONG_PID,
     10 	ERR_RUN_COMMAND_WAITPID_SIGNAL,
     11 	ERR_RUN_COMMAND_WAITPID_NOEXIT,
     12 };
     13 #define IS_RUN_COMMAND_ERR(x) (-(x) >= ERR_RUN_COMMAND_FORK)
     14 
     15 struct child_process {
     16 	const char **argv;
     17 	pid_t pid;
     18 	/*
     19 	 * Using .in, .out, .err:
     20 	 * - Specify 0 for no redirections (child inherits stdin, stdout,
     21 	 *   stderr from parent).
     22 	 * - Specify -1 to have a pipe allocated as follows:
     23 	 *     .in: returns the writable pipe end; parent writes to it,
     24 	 *          the readable pipe end becomes child's stdin
     25 	 *     .out, .err: returns the readable pipe end; parent reads from
     26 	 *          it, the writable pipe end becomes child's stdout/stderr
     27 	 *   The caller of start_command() must close the returned FDs
     28 	 *   after it has completed reading from/writing to it!
     29 	 * - Specify > 0 to set a channel to a particular FD as follows:
     30 	 *     .in: a readable FD, becomes child's stdin
     31 	 *     .out: a writable FD, becomes child's stdout/stderr
     32 	 *     .err > 0 not supported
     33 	 *   The specified FD is closed by start_command(), even in case
     34 	 *   of errors!
     35 	 */
     36 	int in;
     37 	int out;
     38 	int err;
     39 	const char *dir;
     40 	const char *const *env;
     41 	unsigned no_stdin:1;
     42 	unsigned no_stdout:1;
     43 	unsigned no_stderr:1;
     44 	unsigned perf_cmd:1; /* if this is to be perf sub-command */
     45 	unsigned stdout_to_stderr:1;
     46 	void (*preexec_cb)(void);
     47 };
     48 
     49 int start_command(struct child_process *);
     50 int finish_command(struct child_process *);
     51 int run_command(struct child_process *);
     52 
     53 #define RUN_COMMAND_NO_STDIN 1
     54 #define RUN_PERF_CMD	     2	/*If this is to be perf sub-command */
     55 #define RUN_COMMAND_STDOUT_TO_STDERR 4
     56 int run_command_v_opt(const char **argv, int opt);
     57 
     58 #endif /* __PERF_RUN_COMMAND_H */
     59