当前位置: 技术问答>linux和unix
dup2的问题,百思不得其解,求教,谢谢
来源: 互联网 发布时间:2017-02-24
本文导语: 用dup2(1, fd);想要将输出到fd上的语句都输出到stdout上,可是不知道为什么屏幕上没有输出,请各位指教,谢谢! #include #include #include int main() { int fd[2]; pipe(fd); pid_t pchild; if((pchild = fork()) == 0) { close(fd[0...
用dup2(1, fd);想要将输出到fd上的语句都输出到stdout上,可是不知道为什么屏幕上没有输出,请各位指教,谢谢!
#include
#include
#include
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] = '';
printf("%s", cmd);
//这一段语句可以得到输出,说明fd[0]是有数据的
//然而把这段换成dup2(1, fd[0]); 就没有输出了,为什么得不到输出呢?
}
return 0;
}
#include
#include
#include
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] = '';
printf("%s", cmd);
//这一段语句可以得到输出,说明fd[0]是有数据的
//然而把这段换成dup2(1, fd[0]); 就没有输出了,为什么得不到输出呢?
}
return 0;
}
|
道理是一样的,dup2把newfd关闭了,之前newfd与数据的关联关系已经不存在了
|
dup2(1, fd[0])是让fd[0]这个描述符共享描述符1,描述符1是终端输出,你读一个终端输出当然没有东西了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。