Linux系統程式設計——檔案程式設計(五)自己實現CP指令
阿新 • • 發佈:2021-05-06
cp指令用於複製檔案或目錄,如同時指定兩個以上的檔案或目錄,且最後的目的地是一個已經存在的目錄,則它會把前面指定的所有檔案或目錄複製到此目錄中。
main的引數
int main(void){/*程式碼*/}//整數型別主函式(無型別)
int main(int argc,char **argv)//整數型別主函式(整數型別 統計引數個數,字元型別*陣列指標至字元[])
其中char **argv可以寫成char *argv[],兩者等價
argc:傳入引數的個數
argv:輸入引數字串,argv[0]為執行程式路徑以及名稱,argv[1],argv[2],argv[3],…分別表示輸入的引數段1,2,3,…
int main(int argc,char* argv[4]) //char** argv
{
printf("totol params: %d\n",argc);
printf("NO.1 params: %s\n",argv[0]);
printf("NO.2 params: %s\n",argv[1]);
printf("NO.3 params: %s\n",argv[2]);
printf("NO.4 params: %s\n",argv[3]);
return 0;
}
CP命令的實現
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv) //將引數傳遞到函式
{
int fdSrc; //用來放原始檔的檔案描述符
int fdDes; //用來放目標檔案的檔案描述符
char* Buf = NULL; //用來存放讀出來的字串
if(argc != 3){ //用來判斷是否輸入了3個引數
printf("error\n");
exit(-1); //強制退出
}
fdSrc = open(argv[1],O_RDWR); //開啟原始檔
int size = lseek(fdSrc,0,SEEK_END); //計算原始檔的大小(位元組數)
lseek(fdSrc,0,SEEK_SET); //將游標重新定位到檔案的頭
Buf = (char *)malloc(sizeof(char) * size); //為char型的buf指標開闢空間,大小為一個char的大小 X 檔案的大小(位元組數)
int n_read = read(fdSrc,Buf,size); //將開啟的原始檔讀到緩衝區buf中,大小為檔案的大小
fdDes = open(argv[2],O_RDWR | O_CREAT | O_TRUNC,0600);//開啟目標檔案,如果沒有的話就要建立目標檔案,檔案許可權為可讀可寫,並且清除目標檔案的原內容
int n_write = write(fdDes,Buf,size); //將緩衝區buf中的資料寫到目標檔案中,大小為讀出原始檔的檔案大小
close(fdSrc); //要將原始檔和目標檔案都要關閉
close(fdDes);
return 0;
}
編譯過後會生成一個可讀可寫可執行的檔案
./mycp file1 ./file3就是將原始檔file1拷貝到當前目錄的file3,(這個file3是程式執行時建立的,剛開始沒有file3)
可以看到file1和file3的大小都相等,所以內容也就實現了拷貝
這樣就自己實現了CP指令的編寫