第一种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) 也是同样的区别了。
阅读(319) | 评论(0) | 转发(0) |