首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何捕获execvp的输出

要捕获execvp的输出,可以采取以下步骤:

  1. 创建新的进程:首先,在程序中调用execvp函数以启动新的进程。该函数需要指定要执行的程序,以及程序所需的参数和选项。
  2. 设置输出管道execvp函数中的第一个参数是char *argv[],它指定了要执行的命令。可以通过将该字符串的最后一个参数设置为NULL来指定标准输出流。例如:
代码语言:txt
复制

char *argv[] = { "my_program", NULL, NULL };

代码语言:txt
复制
  1. 写入到输出管道:在调用execvp函数之前,需要确保已创建用于写入的管道。该管道的写入端应连接到新的进程,读取端应连接到标准输出。可以使用pipe函数创建管道:
代码语言:c
复制

int pipefd2;

if (pipe(pipefd) == -1) {

代码语言:txt
复制
   perror("pipe");
代码语言:txt
复制
   exit(1);

}

代码语言:txt
复制
  1. 将输出重定向到管道:在程序中,使用dup2函数将标准输出重定向到管道的读取端。例如:
代码语言:c
复制

if (dup2(pipefd1, STDOUT_FILENO) == -1) {

代码语言:txt
复制
   perror("dup2");
代码语言:txt
复制
   exit(1);

}

代码语言:txt
复制
  1. 读取管道输出:在程序中,使用read函数从管道的写入端读取输出。例如:
代码语言:c
复制

char buffer128;

ssize_t bytesRead;

if ((bytesRead = read(pipefd0, buffer, sizeof(buffer))) > 0) {

代码语言:txt
复制
   printf("Output: %s", buffer);

} else if (bytesRead == 0) {

代码语言:txt
复制
   printf("EOF");

} else {

代码语言:txt
复制
   perror("read");
代码语言:txt
复制
   exit(1);

}

代码语言:txt
复制
  1. 关闭管道:在程序中,使用close函数关闭管道。例如:
代码语言:c
复制

close(pipefd0);

close(pipefd1);

代码语言:txt
复制

通过以上步骤,可以确保在调用execvp函数后,程序能够捕获并输出新的进程所产生的输出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券