Unix-Linux編程實踐教程——cp

/*--version 1.0--*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <cstdlib>

#define BUFFERSIZE 4096
#define COPYMODE 0644

void oops(const char *, const char *);

int main(int ac, char * av[]){

    int in_fd, out_fd,n_chars;
    char buf[BUFFERSIZE];

    if(ac!=3){
        fprintf(stderr, "usage: %s source dest \n", *av);
        exit(1);
    }

    if((in_fd = open(av[1], O_RDONLY)) == -1){
        oops("Cannot open ", av[1]);
    }
    if((out_fd = creat(av[2], COPYMODE)) == -1){
        oops("Cannot create", av[2]);
    }

    while((n_chars = read(in_fd, buf, BUFFERSIZE))>0)
        if(write(out_fd, buf, n_chars) != n_chars)
            oops("Write err", av[2]);

    if(n_chars == -1)
        oops("Read err from", av[1]);

    if(close(in_fd) == -1 || close(out_fd) == -1)
        oops("Close err", "");

    return 0;
}

void oops(const char * s1, const char * s2){
    fprintf(stderr, "ERROR: %s", s1);
    perror(s2);
    exit(1);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章