设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件源文件名和目标文件名都由键盘输

设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件源文件名和目标文件名都由键盘输

/*设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件,
  源文件名和目标文件名都由键盘输入
 * 
 * */
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>

#define BUFFER_SIZE 1024

int main(int argc,char **argv)
{
	int fd,fds;
	int bytes_read,bytes_write;
	char buffer[BUFFER_SIZE];
	char *ptr;
	if(argc!=3)
	{
		fprintf(stderr,"Usage:%s from file to file \n\a",argv[0]);
		exit(1);
	}
	/*打开源文件*/
	if((fd=open(argv[1],O_RDONLY))==-1)
	{
		fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));
		exit(1);
	}
	/*创建目的文件*/
	if((fds=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
	{
		fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
		exit(1);
	}
	/*以下代码是一个拷贝文件的代码*/
	while(bytes_read=read(fd,buffer,BUFFER_SIZE))
	{
		/*如果出现错误*/
		if((bytes_read==-1)&&(errno!=EINTR))
		{
			break;
		}
		else if(bytes_read>0)
		{
			ptr=buffer;
			while(bytes_write=write(fds,ptr,bytes_read))
			{
				/*如果出现错误*/
				if((bytes_write==-1)&&(errno!=EINTR))
				{
					break;
				}
                 /*写入的文件到达了末尾*/
				else if(bytes_write==bytes_read)
				{
					break;
				}
                /*写入的文件没有到达末尾*/
				else if(bytes_write>0)
				{
					ptr+=bytes_write;
					bytes_read-=bytes_write;
				}
			}
			/*写的过程中,易发生的错误*/
			if(bytes_write==-1)
			{
				break;
			}
		}
	}
	close(fd);
	close(fds);
}

结果

新建源文件file.txt

设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件源文件名和目标文件名都由键盘输

写入文件

设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件源文件名和目标文件名都由键盘输

编译,运行

 

设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件源文件名和目标文件名都由键盘输

查看拷贝文件

设计一个程序,使用read函数从源文件读取数据,再用write函数写入到目标文件源文件名和目标文件名都由键盘输