void str_echo( int sockfd)
{
char line[MAXLINE];
FILE *fpin, *fpout;

fpin = fdopen(sockfd,"r"); //创建两个标准I/O流用于输入
fpout = fdopen(sockfd,"w"); //用于输出

while(fgets(line, MAXLINE, fpin) != NULL)
fputs(line, fpout);
}


发送过来的数据被放入缓冲区中,但不把缓冲区内容写到描述字中,直到缓冲区满
或遇到文件尾。

因为标准I/O函数库自动执行的缓冲机制:
1,完全缓冲(fully buffering):发生I/O情况:缓冲区满, 进程显示调用
fflush, 进程调用exit终止自身。 通常其大小为8192.
2,行缓冲(line buffering):发和I/O情况:碰到一个换行符,进程调用fflush
或者调用exit终止自身。
3,不缓冲(unbuffering):只要每次调用I/O输出函数都发生I/O.


约定: 标准错误输出总是不缓冲
标准输入和标准输出完全缓冲,除非它们指代终端设备,此时,是行缓冲。
所有其它I/O流都是完全缓冲,除非它们指代终端设备(行缓冲)。