dup()和dup2()系统调用的真正作用是什么?

4
< p > dup()dup2() 系统调用到底是做什么的?在实践中我应该如何使用它们?


在阅读手册和搜索后,您还有什么不理解的部分? - Matthew Flaschen
我无法理解如何在编程中使用以及在哪里使用。 - user484457
3
你看过这两个网址吗?https://dev59.com/qnI-5IYBdhLWcg3wsKv9 和 http://stackoverflow.com/questions/3918962/unix-c-dup2-question - Zeke
1个回答

5

这两个函数都会创建一个新的文件描述符,对应于一个已经存在的打开的文件描述符。大部分属性(比如位置)在旧的和新的文件描述符之间是共享的;唯一不共享的属性我能想到的是 close-on-exec 标志。dup 和 dup2 的区别在于,dup 分配最低可用的文件描述符号码,而 dup2 允许你选择要分配的文件描述符号码,并原子性地关闭并替换它,如果该号码已被其他文件占用。


1
还要注意,使用F_DUPFD命令的fcntl函数与dup2函数的行为类似,但不会覆盖现有的文件描述符(fd),因此在多线程程序中尝试创建一个尚未被占用的特定fd号码时,可以安全地使用它。 - R.. GitHub STOP HELPING ICE
1
此外,如果newfd所引用的文件已经打开,则在执行复制之前将关闭该文件。 - Soner from The Ottoman Empire
@snr:不是“之前”。而是原子性地相对于 - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接