cp命令的实现

来源:互联网 发布:记忆碎片剧情解析知乎 编辑:程序博客网 时间:2024/04/19 15:00
#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#define BUFFERSIZE 4096#define COPYMODE   0644void oops(char *, char *);int main(int argc, char *argv[]){    int in_fd, out_fd, n_chars;    char buf[BUFFERSIZE];    if (argc != 3)    {           fprintf(stderr, "Usage: %s source destination\n", *argv);        exit(1);    }       if ((in_fd = open(argv[1], O_RDONLY)) == -1)        oops("Cannot open ", argv[1]);        if ((out_fd = creat(argv[2], COPYMODE)) == -1)        oops("Cannot creat ", argv[2]);        while ((n_chars = read(in_fd, buf, BUFFERSIZE)) > 0)    {           if (write(out_fd, buf, n_chars) != n_chars)        {               oops("Write error to ", argv[2]);        }       }       if (n_chars == -1)        oops("Read error from ", argv[1]);    if (close(in_fd) == -1 || close(out_fd) == -1)          oops("Error closing files", "");    return 0;}void oops(char *s1, char *s2){    fprintf(stderr, "Error: %s", s1);    perror(s2);    exit(1);}