我正在尝试理解管道,并且正在进行一个示例:
#define _XOPEN_SOURCE 700
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
pid_t p;
int status;
int pipefd[2];
pipe(pipefd);
p = fork();
if(p == 0)
{
dup2(pipefd[1], 1);
close(pipefd[0]);
close(pipefd[1]);
execlp(argv[1], argv[1], NULL);
perror(argv[1]);
exit(1);
}
dup2(pipefd[0], 0);
close(pipefd[0]);
close(pipefd[1]);
execvp(argv[2], argv + 2);
perror(argv[2]);
return 0;
}
我不明白为什么这段代码在使用管道之前会关闭它。
为什么我们要在这里调用
close
?
STDIN_FILENO
、STDOUT_FILENO
和STDERR_FILENO
,而不是0、1和3。 - undefined