【发布时间】:2017-05-13 09:38:04
【问题描述】:
我想 fwrite() 是在用户模式下将数据从用户应用程序传递到缓冲区,但是 write() 是将数据从用户模式下的缓冲区传递到内核模式下的缓冲区,并且 fsync () 正在将内核模式下缓冲区中的数据传递到磁盘。对吗?并且 read() 正在将数据从内核模式的缓冲区传递到用户模式的缓冲区,而 fread() 正在将数据从用户模式的缓冲区传递到用户应用程序,对吗?对于 pwrite() ,除了 lseek 之外,它还调用 fsync()?
【问题讨论】:
-
是的(大部分情况下)。
read/write将数据从内核缓冲区传输到/从用户缓冲区传输到/从用户缓冲区传输。fread/fwrite在用户层多了一层缓冲。 -
@kaylum,pwrite 会调用 fsync() 内部吗?还有 fsync() 将数据从内核缓冲区写入磁盘,那么哪个系统调用从磁盘读取数据到内核缓冲区?
-
单个帖子中的问题太多。在询问之前阅读这些功能的
man怎么样?对fsync()的调用从未在man pwrite 中注明。which system call read data from disk to kernel buffers?- 没有直接执行此操作的系统调用。不过,有fadvice 函数,它告诉内核文件打算如何使用,所以它可以准备缓冲区。 -
@Tsyvarev,我已经读过了,但是没有任何细节,比如与缓冲区有关。
-
@Tsyvarev,你能帮忙确认一下我的哪些陈述是错误的吗?
标签: linux io linux-kernel