linux - Unix 中的无缓冲 I/O

标签 linux unix

在 UNIX 中,大多数都说像 read、write、close 都是无缓冲 I/O。我不明白为什么它被称为无缓冲 I/O。在 UNIX read 是一个系统调用。以下是read的结构。

       ssize_t read(int fd, void *buf, size_t count);

read() 尝试从文件描述符 fd 读取最多 count 个字节到从 buf 开始的缓冲区中。甚至 read 函数也读取输入 一个字符接着一个字符,但最后它被存储在此处名为“buf”的缓冲区中。所以,这里也使用了缓冲区。因此,read 如何成为无缓冲 I/O.printf 函数还将字符串文字存储在称为 buffer 的数组中。一旦数组达到\n,缓冲区就会被打印。这个机制也和read类似。那么,如何区分这些函数是无缓冲的还是有缓冲的。在 它们根据什么来区分函数是缓冲的还是非缓冲的。

最佳答案

您提供的read函数是无缓冲I/O函数的一部分。

术语无缓冲意味着每次读取写入都会调用内核中的系统调用。

read的情况下,它不会逐个字符地读取,而是通过一次内核调用读取您使用count参数指定的字节数。

标准 I/O 库提供的缓冲函数的目标是使用最少数量的读取写入调用。它还可以自动计算最佳缓冲区大小的count,以获得更好的性能。

希望现在情况或多或少已经清楚了。

关于linux - Unix 中的无缓冲 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32093576/

相关文章:

linux - 重启后 SSH 卡住

linux - 如何让 Free Pascal 控制台应用程序运行在 "forever"?

linux - 如何获取所有文件中出现的单词?但是每个目录的单词数而不是单个数字

linux - 有人可以向初学者提供有关 Hadoop 工作原理的高级、简单的解释吗?

linux - 没有换行的cat文件

linux - 无法在 AWS 中进行 SSH

linux - 用于 Linux 编程的 Xbox 360

python - os.close(3) 是做什么用的?

node.js - 将图像附加到现有 PDF 的正确位置

c - 如何将日期时间转换为 c 中的 unix 时间戳?