要捕获execvp
的输出,可以采取以下步骤:
execvp
函数以启动新的进程。该函数需要指定要执行的程序,以及程序所需的参数和选项。execvp
函数中的第一个参数是char *argv[]
,它指定了要执行的命令。可以通过将该字符串的最后一个参数设置为NULL
来指定标准输出流。例如:
char *argv[] = { "my_program", NULL, NULL };
execvp
函数之前,需要确保已创建用于写入的管道。该管道的写入端应连接到新的进程,读取端应连接到标准输出。可以使用pipe
函数创建管道:
int pipefd2;
if (pipe(pipefd) == -1) {
perror("pipe");
exit(1);
}
dup2
函数将标准输出重定向到管道的读取端。例如:
if (dup2(pipefd1, STDOUT_FILENO) == -1) {
perror("dup2");
exit(1);
}
read
函数从管道的写入端读取输出。例如:
char buffer128;
ssize_t bytesRead;
if ((bytesRead = read(pipefd0, buffer, sizeof(buffer))) > 0) {
printf("Output: %s", buffer);
} else if (bytesRead == 0) {
printf("EOF");
} else {
perror("read");
exit(1);
}
close
函数关闭管道。例如:
close(pipefd0);
close(pipefd1);
通过以上步骤,可以确保在调用execvp
函数后,程序能够捕获并输出新的进程所产生的输出。
领取专属 10元无门槛券
手把手带您无忧上云