在 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/