引用this question关于 read() 和 write(),我想知道是否每个打开的文件描述都有自己的读写缓冲区,或者当文件一次打开多次时是否可能只有一个读写缓冲区。我很好奇,因为这会对重叠写入同一文件的确切情况产生影响。也许这是因 Unix 而异的东西?
(据我了解,“文件描述”指的是有关打开文件的信息/选项,例如当前标记位置。相比之下,“文件描述符”仅指进程中用来引用的数字描述。)
最佳答案
这有点取决于您是在谈论套接字还是实际文件。
严格来说,描述符从来没有自己的缓冲区;它只是更深层次抽象的句柄。
文件系统对象有它们自己的缓冲区,至少在需要时是这样。也就是说,如果程序写入小于文件系统 block 大小,内核别无选择,只能读取 FS block 并将写入与现有数据合并。
此缓冲区附加到 vnode 并处于较低级别,可能是 inode。它属于文件而不是描述符。如果内存可用,它可能会保存很长时间。
在套接字的情况下,然后是一个流,但不是特定的单个描述符,确实有它拥有的缓冲区。
关于linux - 每个 Unix 文件描述都有自己的读/写缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201543/