dup2的问题,百思不得其解,求教,谢谢
用dup2(1, fd);想要将输出到fd上的语句都输出到stdout上,可是不知道为什么屏幕上没有输出,请各位指教,谢谢!
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int fd[2];
pipe(fd);
pid_t pchild;
if((pchild = fork()) == 0)
{
close(fd[0]);
dup2(fd[1], 1);
execl("/bin/ls", "ls", NULL);
}
else
{
close(fd[1]);
wait(NULL);
char cmd[100];
read(fd[0], cmd, 99);
cmd[99] = '\0';
printf("%s", cmd);
//这一段语句可以得到输出,说明fd[0]是有数据的
//然而把这段换成dup2(1, fd[0]); 就没有输出了,为什么得不到输出呢?
}
return 0;
}
------解决方案--------------------dup2(1, fd[0])是让fd[0]这个描述符共享描述符1,描述符1是终端输出,你读一个终端输出当然没有东西了。
------解决方案--------------------
道理是一样的,dup2把newfd关闭了,之前newfd与数据的关联关系已经不存在了