1. 程式人生 > 其它 >Linux系統程式設計——檔案程式設計(五)自己實現CP指令

Linux系統程式設計——檔案程式設計(五)自己實現CP指令

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指令的編寫