【发布时间】:2011-05-09 10:32:30
【问题描述】:
dup() 和 dup2() 系统调用的真正作用是什么?我将如何在实践中使用它们?
【问题讨论】:
-
阅读手册页和搜索后,您不了解哪些部分?
-
我无法理解如何在编程中使用以及在哪里使用
dup() 和 dup2() 系统调用的真正作用是什么?我将如何在实践中使用它们?
【问题讨论】:
两者都创建一个与现有打开文件描述相对应的新文件描述符。新旧 fd 之间的大多数属性(如位置)是共享的;我能想到的唯一不共享的属性是 close-on-exec 标志。 dup 和 dup2 之间的区别在于,dup 分配了最低的可用文件描述符编号,而 dup2 允许您选择将分配的文件描述符编号,如果已被占用,则自动关闭并替换它。
【讨论】:
fcntl 和F_DUPFD 命令的行为类似于dup2,但不会破坏现有的fd,因此在尝试创建特定的线程程序时可以安全地使用它尚未使用的 fd 号码。
newfd引用的文件已经打开,在复制之前会先关闭。