file_cp的疑点2003.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:2 大小:30KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

file_cp的疑点2003.doc

file_cp的疑点2003.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdio.h>#include<errno.h>#defineBUFFER_SIZE1024intmain(intargc,char**argv){intfrom_fd,to_fd;intbytes_read,bytes_write;charbuffer[BUFFER_SIZE];char*ptr;if(argc!=3){fprintf(stderr,"Usage:%sfromfiletofile/n/a",argv[0]);exit(1);}/*打开源文件*/if((from_fd=open(argv[1],O_RDONLY))==-1){fprintf(stderr,"Open%sError:%s/n",argv[1],strerror(errno));exit(1);}/*创建目的文件*/if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1){fprintf(stderr,"Open%sError:%s/n",argv[2],strerror(errno));exit(1);}/*以下代码是一个经典的拷贝文件的代码*/while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)){/*一个致命的错误发生了*/if((bytes_read==-1)&&(errno!=EINTR))break;elseif(bytes_read>0){ptr=buffer;while(bytes_write=write(to_fd,ptr,bytes_read)){/*一个致命错误发生了*/if((bytes_write==-1)&&(errno!=EINTR))break;/*写完了所有读的字节*/elseif(bytes_write==bytes_read)break;//1.5K时候,第一复制1K,剩余0.5K,此处仍然相等/*只写了一部分,继续写*/elseif(bytes_write>0)//黄色标记的代码,什么情况下执行{ptr+=bytes_write;bytes_read-=bytes_write;}}/*写的时候发生的致命错误*/if(bytes_write==-1)break;}}close(from_fd);close(to_fd);exit(0);}