如果以下代码
ssize_t len = read(0, buf, BUF_SIZE);
perror("read()");
printf ("%i '%s'\n", (int) len, buf);
执行从终端读取时,read()
在换行符(按 Enter 键)处终止输入而不显示任何错误,即逐行输入。但是,当我将其重定向为使用 shell 从文件输入时,它会忽略换行符并继续读取整个缓冲区或直到 EOF。
根据文档,后一种行为更为预期。那么,为什么终端输入会在换行符上终止?这是否意味着此输入默认情况下是非阻塞的?检查是否达到了 EOF(Ctrl-D)或某些其他条件导致返回不完整的输入的正确方法是什么?