char buf[1];
if (argc == 1) {
while (read(STDIN_FILENO, buf, 1) > 0) {
write(1, buf, sizeof(buf));
}
}
关于这个片段,我有几点要澄清。我们运行它,./exec_file,假设我们只是按回车键。我们移动到下一行并读取1字节
'\n'
然后将其写入stdout,使我们再下一行。。。很简单。现在我们输入h
,然后输入。程序会在下一行显示一个不可见的h
。在我们输入
'\n'
之后,它会将代码读入缓冲区,然后将其写入stdout,但不知怎的,程序会等待在下一行将其吐出,直到我按了回车键之后……如何?最后,当我们第一次进入while循环时,由于我们一开始没有输入任何内容,所以最初不会读取return
h
?? 最佳答案
stdin
的行为与大多数其他流稍有不同。
首先,输入是行缓冲的。这意味着在按回车键之前,输入是不可用的。这就解释了在您按下回车键之前,h
不会出现。
因为它是一条小溪,所以没有尽头。当没有要读取的数据时,调用将阻塞,直到某些数据可用(或直到程序接收到信号)。插座的工作原理是一样的。
使用fcntl
时的阻塞行为can be turned off:
int fd = STDIN_FILENO;
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
关于c - 了解C语言中的读写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36349691/