gpt4 book ai didi

linux - Linux 中的 fwrite()、write()、pwrite()、fread()、read()、pread()、fsync() 有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:04 26 4
gpt4 key购买 nike

我想 fwrite() 是将数据从用户应用程序传递到用户模式下的缓冲区,但是 write() 是将数据从用户模式下的缓冲区传递到内核模式下的缓冲区,而 fsync () 是在内核模式下将数据从缓冲区传递到磁盘。对吧? read() 将数据从内核模式的缓冲区传递到用户模式的缓冲区,而 fread() 将数据从用户模式的缓冲区传递到用户 Application ,对吗?对于 pwrite() ,除了 lseek 之外,它还调用了 fsync()?

最佳答案

For pwrite() , besides lseek, it also call the fsync()?

不,pwrite()不打电话 fsync() .参见 pwrite(3): on file - Linux man page :

The <i>pwrite</i>() function shall be equivalent to <i>write</i>(), except that it writes into a given position without changing the file pointer.

Also fsync() write data from kernel buffers to disk, so which system call read data from disk to kernel buffers ?

将数据从内核缓冲区写入磁盘fsync()可以被调用,但它不是必须的,如果缓冲区最终被刷新就足够了,这迟早会发生,除非系统崩溃或被重置。
将数据从磁盘读取到内核缓冲区,不需要专用的系统调用1。系统从read()知道调用要读取哪些数据,并且必须在调用返回之前读取数据(除非它们已经被缓冲)。
1最接近这种系统调用的可能是(正如 Tsyvarev 已经提到的)fadvise(2): Give advice about file access - Linux man page :

Allows an application to to tell the kernel how it expects to use a file handle, so that the kernel can choose appropriate read-ahead and caching techniques for access to the corresponding file.

关于linux - Linux 中的 fwrite()、write()、pwrite()、fread()、read()、pread()、fsync() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41373309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com