1. 程式人生 > >Linux下程式(C語言)實現對檔案的複製

Linux下程式(C語言)實現對檔案的複製

目標: 使用系統呼叫實現cp命令。

原理: 使用系統呼叫open開啟檔案,使用read從檔案讀資料,使用write向檔案寫資料。
傳給可執行程式的引數個數存放在main函式的argc中,引數首地址存放在指標陣列argv中。

我的程式碼

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc,char *argv[])
{
	if(argc <=2)
	{
		printf("no file to operate\n");
		return 0;
	}
	int fr = open(argv[1],O_RDONLY,0777);
	int fw = open(argv[2],O_WRONLY|O_CREAT,0777);

	if(fr < 0)
	{
		perror("read ");
		return 0;
	}
	if(fw < 0)
	{
		perror("write");
		return 0;
	}
	
	char str[20];
	int count;
	while((count = read(fr,str,20)) > 0)
	{
		write(fw,str,count);
	}
	close(fr);
	close(fw);
	return 0;
}

老師給的程式碼:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{

	if((argc == 3) && (strcmp(argv[1], argv[2]) != 0))
	{
		int fd_src, fd_dest, ret;
		fd_src = open(argv[1], O_RDONLY);
		
		if(fd_src < 0)
		{
			perror("open argv[1]");
			return -1;
		}
		fd_dest = open(argv[2], O_WRONLY|O_CREAT, 0755);
		if(fd_dest < 0)
		{
			close(fd_src);
			perror("open argv[2]");
			return -1;
		}
			char buf[1024] = "";
		do
		{
		    memset(buf,0,sizeof(buf));
			ret = read(fd_src, buf, sizeof(buf));
			if(ret>0)
			write(fd_dest, buf, ret);
		}while(ret == 1024);
		close(fd_src);
		close(fd_dest);
	}
	return 0;
}