Chinaunix首页 | 论坛 | 博客
  • 博客访问: 867105
  • 博文数量: 82
  • 博客积分: 2283
  • 博客等级: 大尉
  • 技术积分: 2007
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-15 22:19
文章分类

全部博文(82)

文章存档

2012年(82)

分类: 系统运维

2012-10-11 21:51:26

第一种dup2(fd,0)之前已经将 fd 初始化指向到文本 fd_test.txt了,
并且不会被后面的代码所修改。
第二种dup2(0,fd)则将 fd 重新指向到文件描述符0所代表的文件(即终端标准输入)了。
那么可以看到,程序的执行中不会再读取 fd_test.txt 文件了。
而是进入了一种交互模式。
另外,这时“输入重定向”也可以生效了。
文件描述符0被 “<” 重定向到 fd_test_in.txt 了
所以,这里直接输出了该文本的内容。


*************************************

最后,我在总结一下。
dup2(fd,0) 相当于“输入重定向”的功能,
dup2(0,fd) 则表示 fd 所指的文件接收来自终端的输入,
即相当于“输出重定向”了。
这样说对吗?
这也是错的。
因为,fd 已经不再指向原来的那个文件了。
它和文件描述符0 已经在共享同一个文件表项(即指向终端标准输入的那个表项)了。
而且,第二句合法的前提是 fd 一定要事先已经被赋值了。
否则这种写法是编程中决不能出现的。

总之,为了避免这种晦涩的用法,我们应该避免这样的代码出现。
“输出重定向”的功能可以用 dup2(fd ,1) 替代。

当然,dup2(fd,1) 和 dup2(1,fd) 也是同样的区别了。
阅读(9938) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~