Linkus 的学生作业:
linkus@windwaker:~/Desktop/windwaker/linux/Linux_File_Operations/code $ gcc file_cp.c
linkus@windwaker:~/Desktop/windwaker/linux/Linux_File_Operations/code $ ./a.out src.txt dst.txt
Copy done. 29 word copied.
linkus@windwaker:~/Desktop/windwaker/linux/Linux_File_Operations/code $ ./a.out src.txt dst.txt
Copy done. 33 word copied.
#include
#include
#include
#include
#include
#include
#define BUFF_SIZE 8
int main(int argc,char *argv[])
{
int fd_src, fd_dst;
int buffer[BUFF_SIZE] = {0};
int cnt = 0;
long long total_cnt = 0;
if (argc != 3){
fprintf(stderr,"Usage : < %s > < src > < dst >\n",argv[0]);
return -1;
}
fd_src = open(argv[1],O_RDONLY);
if(fd_src == -1)
{
perror("fd_src = -1\n");
return -1;
}
fd_dst = open(argv[2],O_RDWR|O_TRUNC|O_CREAT,0644);
if(fd_dst == -1)
{
perror("fd_dst = -1\n");
return -1;
}
do{
cnt = read(fd_src,buffer,BUFF_SIZE);
if(cnt != -1)
{
//printf("cnt = %d",cnt);
write(fd_dst,buffer,cnt);
total_cnt += cnt;
}
}while(cnt > 0);
close(fd_src);
close(fd_dst);
fprintf(stdout,"Copy done. %lld word copied.\n",total_cnt);
return 0;
}