免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3703 | 回复: 13
打印 上一主题 下一主题

关于dup2复制标准输入不理解。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-31 09:45 |只看该作者 |倒序浏览
我看到一个程序中的一句是:
dup2(fd[0], STDIN_FILENO);
close(fd[0]);
假定fd[0]是一个文件描述符,或是一个管道的读端,
在用dup2时,不是先把STDIN_FILENO关闭,再复制的吗?
如果是这样的话,那为什么还要说标准输入成为管道的读端?
实际 上的标准输入不是被关闭了吗?

谢谢

论坛徽章:
0
2 [报告]
发表于 2007-10-31 09:55 |只看该作者
:wink:
dup2复制了一个套接字并且是标准输入,
这样fd[0]和复制出来的标准输入都是指向同一个管道读端的
所以后来close一个
这样就剩下标准输入指向管道的读端了

论坛徽章:
0
3 [报告]
发表于 2007-10-31 10:12 |只看该作者
dup2的第二个参数如果先被使用,是要先关闭,后再复制的。
标准输入没有被关闭吗?

论坛徽章:
0
4 [报告]
发表于 2007-10-31 10:19 |只看该作者
关闭0,打开0
标准输入不还是打开的么
关闭一扇门,再把那扇门打开,只是重定向了一下而已

论坛徽章:
0
5 [报告]
发表于 2007-10-31 10:27 |只看该作者
我认为是先关闭标准输入,在把fd[0]的属性复制给STDIN_FILENO,标准输入没有打开,
不知道这样理解对不对?

论坛徽章:
0
6 [报告]
发表于 2007-10-31 10:33 |只看该作者
参看APUE, 第三章文件I/O

论坛徽章:
0
7 [报告]
发表于 2007-10-31 10:35 |只看该作者
画个图:
STDIN  ---> (maybe tty or whatever)
fd[0] ---> (pipe )

dup2之后
STDIN --->(pipe)
fd[0] ---> (pipe)  同一个pipe,实在画不到一起去

close之后
STDIN -->(pipe)

论坛徽章:
0
8 [报告]
发表于 2007-10-31 10:38 |只看该作者
具体过程可以用ll /proc/${PID}/fd 加进程sleep的方式查看,就明白了.
${PID}为你进程的pid.

论坛徽章:
0
9 [报告]
发表于 2007-10-31 10:48 |只看该作者

回复 #6 anthony1983 的帖子

我看了才这样想的。

论坛徽章:
0
10 [报告]
发表于 2007-10-31 10:53 |只看该作者

回复 #8 baohuaihuai 的帖子

您是说,我这样一个程序里,加sleep后,看一下您说的,好,我先写一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP