dup2 相对于写入/读取而言是原子的

dup2 相对于写入/读取而言是原子的

假设我有一个文件描述符 4,用于读取/写入,并带有O_APPEND写入标志。如果我有多个线程写入此文件,并且假设我想要定期切换 fd 4 指向的文件,那么我想要执行 dup2 调用以用新文件替换 fd 4。同时多个线程仍然会指向fd 4进行写入。我是否会丢失任何数据,或者正在写入的线程在切换期间是否会遇到错误?

答案1

Linux 手册页和 POSIX 描述相当清楚地表明它确实是原子的:

Linux 手册页上dup2():

关闭和重用文件描述符的步骤newfd是原子执行的。

POSIX,“基本原理”下:

另一方面,dup2()函数提供独特的服务,因为没有其他接口能够自动替换现有的文件描述符。

我看不出有任何理由它在打开、关闭和复制文件描述符方面应该是原子的,但在读取或写入方面则不是。

相关内容