我正在和一位老师交谈,他告诉我读写系统调用正在使用缓冲区,因为你的系统规范中有一个变量控制你可以访问你想要读/写的设备的次数当他等待在设备上写入时,系统使用缓冲区来存储数据。
我在另一篇 Stack Overflow 帖子 (C fopen vs open) 中看到,fopen
和 fwrite
函数的优点之一是这些函数使用缓冲区(即应该会更快)。
我已经阅读了 read 和 write 系统调用的手册页,并且手册页没有讨论任何缓冲区。
我是不是误会了什么? read
/write
C 系统调用缓冲区如何工作?
最佳答案
您提到的函数 read
和 write
是系统调用,因此它们的行为依赖于平台。
如您所知,fread
和fwrite
是C标准库函数。它们在用户空间中进行缓冲,并以这种方式优化典型应用程序的性能。 read
和 write
是不同的。用户空间 C 库(例如 GNU libc)中有一些用于这些函数的 stub 代码,但该代码的主要功能只是提供一个方便的包装器来调用正确的内核功能(但也可以使用 syscall()
调用该功能)直接!)
如果您对详细信息感兴趣,here 是一个示例:uclibc 库中 write
系统调用的包装器。
因此 read
和 write
的典型实现不在用户空间中进行缓冲。不过,它们仍然可能在内核空间中进行缓冲。阅读 O_DIRECT
标志以获取更多详细信息:How are the O_SYNC and O_DIRECT flags in open(2) different/alike?
关于c - 读写 C 系统调用是否使用缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48688650/