设计一个程序,使用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
写入文件
编译,运行
查看拷贝文件