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

标签 linux file unix

引用this question关于 read() 和 write(),我想知道是否每个打开的文件描述都有自己的读写缓冲区,或者当文件一次打开多次时是否可能只有一个读写缓冲区。我很好奇,因为这会对重叠写入同一文件的确切情况产生影响。也许这是因 Unix 而异的东西?

(据我了解,“文件描述”指的是有关打开文件的信息/选项,例如当前标记位置。相比之下,“文件描述符”仅指进程中用来引用的数字描述。)

最佳答案

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

严格来说,描述符从来没有自己的缓冲区;它只是更深层次抽象的句柄

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

此缓冲区附加到 vnode 并处于较低级别,可能是 inode。它属于文件而不是描述符。如果内存可用,它可能会保存很长时间。

在套接字的情况下,然后是一个流,但不是特定的单个描述符,确实有它拥有的缓冲区。

关于linux - 每个 Unix 文件描述都有自己的读/写缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201543/

相关文章:

linux - 查看目录中文件的脚本

c++ - ptrace - 仅 32 位的输入/输出错误(errno 5)

php - 使用 "file"然后使用 "foreach"会导致值之间换行

python获取文件名并在另一个脚本中打开

c - 如何在c中逐行读取?

python - xarg 与 python 多处理+子进程的性能对比

regex - sed 命令仅在 unix 中的最后一行添加文本

linux - VIM 中的一些 bash 命令将输出发送到 bash 而不是 VIM

bash - `sed -i -e` 和 `sed -ie` 有什么区别?

linux - 为什么u-boot在rpi3中调用grub?