gpt4 book ai didi

c - 读写 C 系统调用是否使用缓冲区?

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:22 29 4
gpt4 key购买 nike

我和一位老师谈过,他告诉我读写系统调用使用缓冲区,因为在你的系统规范中有一个变量控制你可以访问你想要读/写的设备的次数on,系统在他等待写入设备时使用buffer来存储数据。

我在另一篇 Stack Overflow 帖子 ( C fopen vs open) 上看到 fopenfwrite 函数的优点之一是这些函数使用缓冲区(这是应该更快)。我已经阅读了 readwrite 系统调用的手册页,手册页没有讨论任何缓冲区。

我是不是误会了什么? read/write C 系统调用缓冲区如何工作?

最佳答案

您提到的函数 readwrite 是系统调用,因此它们的行为取决于平台。

如您所知,freadfwrite 是C 标准库函数。它们在用户空间中进行缓冲,并以这种方式优化典型应用程序的性能。 readwrite 是不同的。用户空间 C 库(例如 GNU libc)中有一些用于这些函数的 stub 代码,但该代码的主要功能只是提供一个方便的包装器来调用正确的内核功能(但也可以使用 syscall() 直接!)

如果您对细节感兴趣,here是一个示例:uclibc 库中 write 系统调用的包装器。

所以 readwrite 的典型实现不会在用户空间中进行缓冲。不过,它们可能仍会在内核空间 中进行缓冲。阅读有关 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/

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