显然,fgets的行为定义了fputs的行为。
1.fgets每次读MAXLINE-1个字符或者读到换行符,然后存入buf
2.fputs输入
3.下次读,若上一次输入未读完,接着读,返回到1;若读完,继续读下一行或者等待输入
我写了个此时函数可以明显看到这个过程(没有注释的话,程序的读入和输出貌似贺MAXLINE 大小无关。但是加上注释,你可以很清晰的看到字符的读入顺序):
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#define MAXLINE 4
int main()
{
char buf[MAXLINE];
while(NULL!=(fgets(buf,MAXLINE,stdin)))
{
if(EOF==fputs(buf,stdout))
printf("fputs error:%s\n",strerror(errno));
//fflush(stdout);
//sleep(10);
}
if(ferror(stdin))
{
printf("fgets error:%s\n",strerror(errno));
}
}