Linux下程式(C語言)實現對檔案的複製
阿新 • • 發佈:2018-12-29
目標: 使用系統呼叫實現cp命令。
原理: 使用系統呼叫open開啟檔案,使用read從檔案讀資料,使用write向檔案寫資料。
傳給可執行程式的引數個數存放在main函式的argc中,引數首地址存放在指標陣列argv中。
我的程式碼:
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> int main(int argc,char *argv[]) { if(argc <=2) { printf("no file to operate\n"); return 0; } int fr = open(argv[1],O_RDONLY,0777); int fw = open(argv[2],O_WRONLY|O_CREAT,0777); if(fr < 0) { perror("read "); return 0; } if(fw < 0) { perror("write"); return 0; } char str[20]; int count; while((count = read(fr,str,20)) > 0) { write(fw,str,count); } close(fr); close(fw); return 0; }
老師給的程式碼:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, char *argv[]) { if((argc == 3) && (strcmp(argv[1], argv[2]) != 0)) { int fd_src, fd_dest, ret; fd_src = open(argv[1], O_RDONLY); if(fd_src < 0) { perror("open argv[1]"); return -1; } fd_dest = open(argv[2], O_WRONLY|O_CREAT, 0755); if(fd_dest < 0) { close(fd_src); perror("open argv[2]"); return -1; } char buf[1024] = ""; do { memset(buf,0,sizeof(buf)); ret = read(fd_src, buf, sizeof(buf)); if(ret>0) write(fd_dest, buf, ret); }while(ret == 1024); close(fd_src); close(fd_dest); } return 0; }