Linux面试题之用C语言写一个文件复制程序

陪她去流浪 桃子 2016年01月31日 编辑 阅读次数:2155

之前面试的时候遇到过几次这样的题,虽然程序功能正常。但不够简洁。

说以下这种写法简洁的原因是:既可以复制标准输入,也可以方便地复制文件,还无需判断命令行参数等。

错误处理也还算过得去,算是我见过的最简洁省事的一种写法。

不使用重定向时,直接复制标准输入到标准输出。

./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的效率。

标签:linux