读写C系统调用是否使用缓冲区?
我和一位老师谈过,他告诉我读写系统调用使用缓冲区,因为在您的系统规范中有一个变量,控制您可以访问要读/写的设备的次数,并且在他等待在设备上写入时,系统使用缓冲区存储数据 我在另一篇Stack Overflow post()上看到,读写C系统调用是否使用缓冲区?,c,io,system-calls,read-write,C,Io,System Calls,Read Write,我和一位老师谈过,他告诉我读写系统调用使用缓冲区,因为在您的系统规范中有一个变量,控制您可以访问要读/写的设备的次数,并且在他等待在设备上写入时,系统使用缓冲区存储数据 我在另一篇Stack Overflow post()上看到,fopen和fwrite函数的优点之一是,这些函数使用了缓冲区(应该更快)。 我已经阅读了read和writesys调用的手册页,手册页没有提到任何缓冲区 我误解了什么吗?read/writeC系统调用缓冲区如何工作 您提到的函数、read和write都是系统调用,因此
fopen
和fwrite
函数的优点之一是,这些函数使用了缓冲区(应该更快)。
我已经阅读了read
和write
sys调用的手册页,手册页没有提到任何缓冲区
我误解了什么吗?
read
/write
C系统调用缓冲区如何工作 您提到的函数、read
和write
都是系统调用,因此它们的行为取决于平台
如您所知,fread
和fwrite
是C标准库函数。它们在用户空间中进行缓冲,并以这种方式优化典型应用程序的性能<代码>读取和写入
是不同的。用户空间C库(如GNU libc)中有一些存根代码用于这些函数,但该代码的主要功能只是提供一个方便的包装器,用于调用正确的内核功能(但也可以使用syscall()
直接调用该功能!)
如果您对细节感兴趣,可以举一个例子:uclibc库中的write
系统调用的包装器
因此,
read
和write
的典型实现不会在用户空间中进行缓冲。不过,它们仍然可以在内核空间中进行缓冲。阅读有关“O_DIRECT”标志的更多详细信息:这里可能有很多误解,很难说它们都起源于何处。首先,C是一种可移植语言。有多种操作系统的C编译器,它们在幕后的工作方式都不同。因此,您不能对(操作)系统的工作方式进行假设。也就是说,read
和write
不是C函数。它们是操作系统函数,没有C系统调用。有操作系统调用,还有C函数。谢谢!您知道在哪里可以读取系统读/写系统调用的确切行为吗?