linux c簡單實現cp 命令

2021-09-23 21:58:14 字數 1464 閱讀 8867

想通過c語言簡單實現cp 命令,基礎原理是;

1.判斷輸入引數原始檔和目標是否為空

2.分別使用open()系統呼叫開啟原始檔,目標檔案不存在則建立目標檔案

3.用read()呼叫將原始檔內容讀到快取buf中,再呼叫write()函式把buf內容寫到目標檔案裡。

注意:在驗證**現read()返回值一直是1,而不是具體讀到的位元組數,後來查閱資料發現是優先順序問題導致:

部分程式如下:

while(count=read(fd_s,buf,512)>0)

printf("count=%d\n",count);

write(fd_d,buf,count);

列印出來的count始終1,

原因:運算子優先順序的問題。

改為:while((count=read(fd_s,buf,512))>0) 執行正確。

如下是簡單cp 命令實現**:

#include#include#include #include#include #include #include #define bufsize 1024  //定義快取大小為1024位元組

int main(int argc,char*ar**)

if((sourfd=open(ar**[1],o_rdonly))==-1) //開啟原始檔

printf("open %s succeed\n",ar**[1]);

if((dstfd=open(ar**[2],o_creat|o_wronly))==-1) //開啟目標檔案,不存在則建立目標檔案

printf("open %s succeed\n",ar**[2]);

//system("ls -l");

while((numread=read(sourfd,buf,bufsize))>0) //從原始檔中讀取資料到buf

printf("write total %d byte to %s\n",totalbyte+=numwrite,ar**[2]); }

//關閉目標檔案原始檔

close(sourfd);

printf("close sourfd\n");

close(dstfd);

printf("close dstfd\n");

return 0;

}

執行結果如下:
zdg@localhost thread]$ ./my_cp fork.c 2.c

open fork.c succeed

open 2.c succeed

read:706

write total 706 byte to 2.c

close sourfd

close dstfd

[zdg@localhost thread]$

linux c實現簡單shell

簡單的模擬shell,可以執行帶乙個輸入重定向 或輸出重定向或管道 命令,程式存在不完善之處,基本能用 include include include include include include include include includechar command 100 存放命令 char ...

linux c 實現 ls 命令

include include include include include include ctime 函式 include 操作目錄 include 操作檔案 include 獲取檔案所有者 include infomodeall a infomodedetail l 顯示資訊模式 typed...

Unix程式設計 實現cp命令

最近苦讀 unix系統程式設計 便寫了一些例項,逐步增加自己unix程式設計的能力。首先來實現乙個unix下常用命令 cp 先看 include include include define bufsize 512 define perm 0755 copy file function int co...