1 綜述
在unix和linux系統裡,cp是經常使用的乙個命令,用於複製檔案,用法如下:
$cp src_file dest_file
以下就使用若干系統呼叫來實現自己的cp。
2 原理
open:開啟乙個檔案;
close:關閉檔案;
read:從檔案中讀取資料到緩衝區;
write:將資料從緩衝區寫入檔案;
fcntl:給檔案加鎖;
sbrk:申請堆記憶體;
brk:釋放堆記憶體。
以下直接上**:
#include #include #include #include #include #include #include int main(int argc, char *argv)
if ((fd_src=open(argv[1], o_rdonly)) == -1)
if ((fd_dest=open(argv[2], o_wronly|o_creat|o_excl, 0664)) == -1)
if (argc == 4)
buf = sbrk(buf_size);
if ((void*)-1 == buf)
lock.l_type = f_rdlck;
lock.l_whence = seek_set;
lock.l_start = 0;
lock.l_len = 0;
lock.l_pid = -1;
if (fcntl(fd_src, f_setlk, &lock) == -1)
errno = 0;
while ((cnt = read(fd_src, buf, buf_size)) > 0)
}if (0 != errno)
close(fd_src);
fd_src = -1;
close(fd_dest);
fd_dest = -1;
brk(buf);
return 0;
}
3 總結
我的cp除了需要指定原始檔和目的檔案之外,還可以指定緩衝區的大小,其它就類似系統的cp了,**很簡單,也能實現了檔案複製功能。
linux自己編寫的 cp 命令
實現功能 cp filename othername 檔案到檔案的拷貝 cp directory filename 檔案到當前目錄的拷貝 cp directory filename directory 檔案到目錄的拷貝 include include include include include ...
實現linux的cp命令
主要運用open 開啟檔案,運用read 讀出檔案的內容到緩衝區,write 將緩衝區的內容寫入新的檔案,來模擬實現linux命令的cp功能。注意可以通過使用lseek 函式來獲取檔案的大小。c語言實現linux cp命令 include open 所需標頭檔案 include lseek 所需標頭...
Unix程式設計 實現cp命令
最近苦讀 unix系統程式設計 便寫了一些例項,逐步增加自己unix程式設計的能力。首先來實現乙個unix下常用命令 cp 先看 include include include define bufsize 512 define perm 0755 copy file function int co...