【发布时间】:2014-03-15 15:26:10
【问题描述】:
我最近在阅读 APUE 时出现了一个基本问题。 我的代码如下所示
#include <apue.h>
#define BUFFSIZE 4096
int main()
{
int n;
char buf[BUFFSIZE];
while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
{
printf("n is %d\n", n); //this line is added by me for testing
if(write(STDOUT_FILENO, buf, n) != n)
err_sys("write error"); //functions defined by the book to print error message
}
if(n < 0)
err_sys("read error");
exit(0);
}
编译后,当我运行程序时如下图所示
> $ ./mycat
123456[enter]
n is 7
123456
1234[enter]
n is 5
1234
它似乎根据我的代码结构工作。而且我不太了解 'enter' 的功能。每次我按下 'enter' 时,读取函数都会终止,并将包括由 'enter' 生成的 '\n' 在内的字符传递给写入函数。所以它进入循环内部,首先打印读取的字符数。
但是,下面的测试似乎与上述和代码结构背道而驰。
> $ ./mycat > data
123456[enter]
1234[enter]
^D
> $ cat data
123456
1234
n is 7
n is 5
似乎程序首先将所有字符写入文件然后打印'n'的值,但根据我的理解,它应该首先打印如下
n is 7
123456
n is 5
1234
我想了又想,就是想不通。你能帮帮我吗?
【问题讨论】: