+-
Linux C中的read(2)如何工作?
根据手册页,我们可以指定要从文件描述符中读取的字节数.

但是在read的实现中,将创建多少读取请求来执行读取?

例如,如果我想读取4MB,它是否只会创建一个4MB的请求,还是会将其拆分为多个小请求?例如每个请求4KB?

最佳答案
> read(2)是一个系统调用,因此它调用vDSO共享库来调度系统调用(在很久以前它曾经是一个中断,但现在有更快的方式来调度系统调用).
>在内核中,调用首先由vfs(虚拟文件系统)处理;虚拟文件系统为inode(表示打开文件的结构)提供了一个通用接口,并提供了与底层文件系统连接的常用方法.
> vfs将调度到底层文件系统(mount(8)程序将告诉您存在哪个挂载点以及在那里使用的文件系统). (有关更多信息,请参见此处 http://www.inf.fu-berlin.de/lehre/SS01/OS/Lectures/Lecture16.pdf)
>文件系统可以自己进行缓存,因此磁盘读取次数取决于缓存中的内容以及文件系统如何分配块以存储特定文件以及文件如何分成磁盘块 – 所有问题都归于特定文件系统)
>如果要进行自己的缓存,请使用O_DIRECT标志打开文件;在这种情况下,努力不使用缓存;但是所有读取必须与512个偏移对齐,并且是512个大小的倍数(这是为了使您的缓冲区可以通过DMA传输到后备存储区 http://www.quora.com/Why-does-O_DIRECT-require-I-O-to-be-512-byte-aligned)
点击查看更多相关文章

转载注明原文:Linux C中的read(2)如何工作? - 乐贴网