while((rn = read(STDIN_FILENO,buf,BUFSIZE)) > 0){
fprintf(stdout,"\n------read %d bytes from stdin into buf------\n",rn);
//if((wn = write(STDOUT_FILENO,buf,BUFSIZE)) != rn){
if((wn = write(STDOUT_FILENO,buf,rn)) != rn){
fprintf(stderr,"write() failed: %s\n",strerror(errno));
//fprintf(stdout,"\n------write %d bytes from buf into stdout------\n",wn);
}
else{
fprintf(stdout,"\n------write %d bytes from buf into stdout------\n",wn);
}
}
如果write语句write(STDOUT_FILENO,buf,rn)
写成了write(STDOUT_FILENO , buf , BUFSIZE)
, 那么最后写入的时候会将上一回读入buf的数据也写入标准输出, 因为你给write指定读多少它就读多少, 指定了BUFSIZE个写入个数, 那么write每次都会写入BUFSIZE个 (除非buf中不够, 而这里不存在不够的情况, 因为BUFSIZE为buf的大小)