IT

cp1.c

kio467 2014. 9. 17. 16:16

#include <stdio.h>

#include <unistd.h>

#include <fcntl.h>


#define BUFFERSIZE 4096


#define COPYMODE 0644


void oops(char *s1, char *s2);


main(int ac, char *av[])

 {

int in_fd, out_fd, n_chars;

char buf[BUFFERSIZE];


if (ac !=3)

{

fprintf(stderr,"usage:%s source destination\n",*av);

exit(1);

}


if((in_fd=open(av[1],O_RDONLY))==-1)

oops("Cannot open", av[1]);


if(!strcmp(av[1],av[2]))

oops("Same file",av[2]);


if((out_fd=creat(av[2],COPYMODE))==-1)

oops("Cannot creat",av[2]);


while((n_chars = read(in_fd, buf, BUFFERSIZE))>0)

if(write(out_fd, buf, n_chars) != n_chars)

oops("write error to", av[2]);

if(n_chars == -1)

oops("read error from", av[1]);

if(close(in_fd) == -1 || close(out_fd) == -1)

oops("error closing file","");

}


void oops(char *s1, char *s2)

{

fprintf(stderr,"error:%s",s1);

perror(s2);

exit(1);

}