之前面试的时候遇到过几次这样的题,虽然程序功能正常。但不够简洁。
说以下这种写法简洁的原因是:既可以复制标准输入,也可以方便地复制文件,还无需判断命令行参数等。
错误处理也还算过得去,算是我见过的最简洁省事的一种写法。
不使用重定向时,直接复制标准输入到标准输出。
./a.out < filein > fileout 即可复制文件系统的文件。
#include <unistd.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #define BUFFSIZE 4096 int main(void) { int n; char buf[BUFFSIZE]; while((n = read(STDIN_FILENO, &buf[0], BUFFSIZE)) > 0) { if(write(STDOUT_FILENO, buf, n) != n) { perror("write error"); exit(-1); } } if(n < 0) { perror("read error"); exit(-1); } return 0; }
参考:《UNIX环境高级编程》第1.5节:输入和输出,第3.9节:I/O的效率。