读书人

dup2的有关问题百思不得其解求教

发布时间: 2012-05-27 05:42:30 作者: rapoo

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

读书人网 >UNIXLINUX

热点推荐