我在使用C进行Linux编程时遇到了问题,我将其缩小到以下问题。
#define BUF_SIZE 10
int main()
{
int cnt;
char buf[BUF_SIZE];
cnt = read(STDIN_FILENO, buf, BUF_SIZE);
printf("cnt = %d\n", cnt);
return 0;
}
鉴于上面的代码,如果我使用终端作为输入,然后输入3个字符然后按回车键,那么我得到了" cnt = 4"。
./a.out
abc
cnt = 4
但是如果我使用重定向,并使用包含两行的文件作为输入,read()
不会停留在换行符,而是继续阅读整个文件。喜欢这个
//inside input_file. This line is not in the file.
123
456
然后我得到了
./a.out < input_file
cnt = 8
现在这是我的问题。为什么read()
在读取文件中的第一行后没有停止?终端输入和文件输入有什么区别?
有些参考资料可以解释这一点。