日期:2014-05-16  浏览次数:20658 次

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与数据的关联关系已经不存在了