#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <errno.h>
#include <string.h>
#define BUFFSIZE 4
int main(void)
{
int n;
char buf[BUFFSIZE];
while((n=read(STDIN_FILENO,buf,BUFFSIZE)) > 0)
{
if(write(STDOUT_FILENO,buf,n) != n)
{
printf("exception happened des is %s, number is %d\n",strerror(errno),errno);
return 0;
}
char newBuf[100];
sprintf(newBuf,"\nbuf num is %d\n",n);
if(write(STDOUT_FILENO,newBuf,strlen(newBuf)) != strlen(newBuf))
{
printf("exception happened des is %s, number is %d\n",strerror(errno),errno);
return 0;
}
}
if(n<0)
printf("read error");
return 0;
}
开始以为我把BUFSIZE 设置成4 ,如果大于4个字节结果肯定报异常,没想到正确输出. 后来发现read是循环读入键盘内容.
结果为:
[user@localhost unix_io]$ ./test
abcdefghijklmn
abcd
buf num is 4
efgh
buf num is 4
ijkl
buf num is 4
mn
buf num is 3