dup() 和 dup2() 系统到底做什么?

use*_*457 5 c unix

dup()和系统调用的真正作用是什么dup2()?我将如何在实践中使用它们?

R..*_*R.. 5

两者都会创建一个与现有打开文件描述相对应的新文件描述符。新旧 fd 之间的大多数属性(如位置)是共享的;我能想到的唯一不共享的属性是 close-on-exec 标志。dup和之间的区别dup2在于,dup分配最低的可用文件描述符编号,而dup2让您选择将分配的文件描述符编号,并自动关闭并替换它(如果已占用)。

  • 另请注意,带有“F_DUPFD”命令的“fcntl”的行为与“dup2”类似,但不会破坏现有的 fd,因此当尝试创建尚未占用的特定 fd 编号时,可以安全地在线程程序中使用它。 (2认同)