Linux面试题之用C语言写一个文件复制程序
之前面试的时候遇到过几次这样的题,虽然程序功能正常。但不够简洁。
说以下这种写法简洁的原因是:既可以复制标准输入,也可以方便地复制文件,还无需判断命令行参数等。
错误处理也还算过得去,算是我见过的最简洁省事的一种写法。
不使用重定向时,直接复制标准输入到标准输出。
./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的效率。