1
#ifndef __PERF_RUN_COMMAND_H
2
#define __PERF_RUN_COMMAND_H
5
ERR_RUN_COMMAND_FORK = 10000,
8
ERR_RUN_COMMAND_WAITPID,
9
ERR_RUN_COMMAND_WAITPID_WRONG_PID,
10
ERR_RUN_COMMAND_WAITPID_SIGNAL,
11
ERR_RUN_COMMAND_WAITPID_NOEXIT,
13
#define IS_RUN_COMMAND_ERR(x) (-(x) >= ERR_RUN_COMMAND_FORK)
15
struct child_process {
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
40
const char *const *env;
44
unsigned perf_cmd:1; /* if this is to be perf sub-command */
45
unsigned stdout_to_stderr:1;
46
void (*preexec_cb)(void);
49
int start_command(struct child_process *);
50
int finish_command(struct child_process *);
51
int run_command(struct child_process *);
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);
58
#endif /* __PERF_RUN_COMMAND_H */