我正在和一位老师谈话,他告诉我读取和写入系统调用是使用缓冲区,因为系统规范中有一个变量可以控制您可以访问要读/写的设备的次数on,并且系统在等待在设备上写入时使用缓冲区来存储数据。
我在其他Stack Overflow帖子(C fopen vs open)上看到$attachment
和.. -attachments $attachment
函数的一个优点是那些函数正在使用缓冲区(应该是这样的快点)。
我已经阅读了fopen
和fwrite
sys调用的手册页,并且手册页没有讨论任何缓冲区。
我误解了什么吗? read
/ write
C系统调用缓冲区如何工作?
答案 0 :(得分:2)
您提及的功能read
和write
是系统调用,因此它们的行为取决于平台。
如您所知,fread
和fwrite
是C标准库函数。它们在用户空间中进行缓冲,并以此方式优化典型应用程序的性能。 read
和write
不同。这些函数在用户空间C库(例如GNU libc)中有一些存根代码,但该代码的主要功能只是为调用正确的内核功能提供方便的包装(但它也可以调用)直接使用syscall()
的功能!)
如果您对详细信息感兴趣,here就是一个示例:uclibc库中write
系统调用的包装器。
因此read
和write
的典型实现不会在用户空间中进行缓冲。但是,它们仍然可以在内核空间中进行缓冲。有关详细信息,请参阅O_DIRECT
标记:How are the O_SYNC and O_DIRECT flags in open(2) different/alike?