当我说标准输入时,我指的是 fd = 0 所指的流。
我正在学习一门涵盖块设备和字符设备的操作系统课程。它专门说键盘是一种字符设备。然而,当我们看到read
系统调用时,我们被告知内核并不关心它从什么读取,只要它是块设备或块设备上的文件。
这是我们得到的代码:
#include <stdlib.h>
#include <unistd.h>
const int BUFFSIZE = 5;
int main () {
int fd, n;
char buffer[BUFFSIZE];
int stdin = 0;
int stdout = 1;
int stderr = 2;
do {
n = read (0, buffer, BUFFSIZE);
if (n < 0) {
write (stderr, "Error occurred\n", 10);
} else {
write (stdout, "Entered if\n", 20);
write (stdout, buffer, n);
}
} while (n > 0);
return 0;
}
我的问题是:Linux 如何处理标准输入(fd = 0)?它是否被视为字符设备,或者内核是否进行了某种缓冲(根据我在运行代码时得到的结果来判断,这似乎很可能。)
此外,了解我是否可以使用 read 系统调用从一般的字符设备中读取会很有用。如果是这样,输入是否缓冲?