/*--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);
}
Unix-Linux編程實踐教程——cp
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.