一尘不染

同一文件的两个文件描述符

linux

使用posix的read()write()linux调用,可以确保如果我以串行方式通过一个文件描述符进行写入并通过另一个文件描述符进行读取,以使两个动作彼此互斥…读取文件描述符将始终看到写入文件描述符最后写入的内容?

我相信是这种情况,但我想确定一下,手册页对此没有太大帮助


阅读 406

收藏
2020-06-07

共1个答案

一尘不染

这取决于您在哪里获得了两个文件描述符。如果它们来自dup(2)调用,则它们共享文件的偏移量和状态,因此对一个文件执行write(2)将影响另一个文件的位置。另一方面,如果它们来自两个单独的open(2)调用,则每个调用将具有自己的文件偏移量和状态。

文件描述符主要只是对内核文件结构的引用,而该内核结构包含大多数状态。打开(2)文件时,您将获得一个新的内核文件结构和一个引用该文件的新文件描述符。当您对文件描述符dup(2)(或通过sendmsg传递文件描述符)时,将获得对相同内核文件结构的新引用。

2020-06-07