int VCSAgExec(const char *path, char *const argv[], char *buf, long buf_size, unsigned long *exit_codep)
Fork a new process, exec a program, wait for it to complete, and return the status. Also, capture the messages from stdout and stderr to buf. Caller must ensure that buf is of size >= buf_size.
VCSAgExec is a forced cancellation point. Even if the C++ entry point that calls VCSAgExec disables cancellation before invoking this API, the thread can get cancelled inside VCSAgExec. Therefore, the entry point must make sure that it pushes appropriate cancellation cleanup handlers before calling VCSAgExec. The forced cancellation ensures that a service thread running a timed-out entry point does not keep running or waiting for the child process created by this API to exit, but instead honors a cancellation request when it receives one.
Explanation of arguments to the function:
Return value: VCSAgSuccess if the execution was successful.
//
// ...
//
char **args = new char* [3];
char buf[100];
unsigned int status;
args[0] = "/usr/bin/ls";
args[1] = "/tmp";
args[2] = NULL;
int result = VCSAgExec(args[0], args, buf, 100, &status);
if (result == VCSAgSuccess) {
// Windows NT:
printf("Exit code of %s is %d\n", args[0], status);
// Unix:
if (WIFEXITED(status)) {
printf("Child process returned %d\n", WEXITSTATUS(status));
}
else {
printf("Child process terminated abnormally(%x)\n", status);
}
}
else {
printf("Error executing %s\n", args[0]);
}
//
// ...
//