设计一个程序,使用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

写入文件

编译,运行

 

查看拷贝文件

 

 

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值