首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

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

2012-05-27 
dup2的问题,百思不得其解,求教,谢谢用dup2(1, fd)想要将输出到fd上的语句都输出到stdout上,可是不知道为

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

热点排行