重定向后为什么read()行为发生了变化?

时间:2017-03-14 03:59:11

标签: c linux redirect

我在使用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()在读取文件中的第一行后没有停止?终端输入和文件输入有什么区别?

有些参考资料可以解释这一点。

0 个答案:

没有答案