了解C语言中的读写

了解C语言中的读写

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循环时,由于我们一开始没有输入任何内容,所以最初不会读取returnh??

最佳答案

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/

10-10 21:28