每个Unix文件描述都有自己的读/写缓冲区吗?

时间:2011-03-05 03:51:39

标签: linux file unix

关于read()和write()的this question,我想知道每个打开的文件描述是否有自己的读写缓冲区,或者是否有一个文件的读写缓冲区它已经被多次打开了。我很好奇,因为这会对重叠写入同一文件的确切情况产生影响。也许这在Unix中有所不同?

(据我所知,“文件描述”是指有关打开文件的信息/选项,例如当前标记位置。相反,“文件描述符”仅指进程中使用的数字。描述。)

2 个答案:

答案 0 :(得分:5)

这取决于你是在谈论套接字还是实际文件。

严格地说,描述符永远不会有自己的缓冲区;它只是一个句柄到更深层次的抽象。

文件系统对象具有“自己的”缓冲区,至少在需要时是这样。也就是说,如果程序写入的内容小于文件系统块大小,则内核别无选择,只能读取FS块并将写入与现有数据合并。

此缓冲区附加到vnode和较低级别,可能是inode。它由文件拥有,而不是描述符。如果有内存,它可能会被保留很长时间。

对于套接字,那么流(但不是特定的单个描述符)确实拥有它拥有的缓冲区。

答案 1 :(得分:0)

如果文件在阻塞模式下打开,那么是的,应该只有一个缓冲区。我敢打赌,由于性能原因,默认是非阻塞。