想通過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...