/**
* @file 1.c
* @brief tow process to copy file in one time
* @author HarkHuang
* @date 2014年3月20日
* @version Initial Draft
* @par Copyright (C), 2013-2023, Join Bright
* @par History:
* Date: 2014年3月20日
* Author: HarkHuang
* Modification: Created file
*/
#include<stdio.h>
//#include<uinstd.h>
#include<fcntl.h>
#include<error.h>
#define maxsize 256
int main(int argc,char *argv[])
{
if(argc!=3)
{
printf("command error!\n");
return -1;
}
int src,des;
int len;
if((src=open(argv[1],O_RDONLY))<0)
{
perror("error");
return -1;
}
if((des=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644))<0)
{
perror("error");
return -1;
}
len=lseek(src,0,SEEK_END);
int pid;
int errno;
int n;
char buf[maxsize];
if((errno=pid=fork())<0)
{
fprintf(stderr,"fork error!",strerror(errno));
return -1;
}
else if(pid==0)
{
lseek(src,len/2,SEEK_SET);
lseek(des,len/2,SEEK_SET);
while((n=read(src,buf,sizeof(buf)))!=0)
{
write(des,buf,n);
}
exit(0);
}
else
{
lseek(src,0,SEEK_SET);
lseek(src,0,SEEK_SET);
while((n=read(src,buf,sizeof(buf)))!=0)
{
write(des,buf,n);
if(lseek(src,0,SEEK_CUR)>len/2)
break;
}
wait(NULL);
exit(0);
}
return 0;
}
多进程拷贝文件 提高io效率 利用 文件空洞 内容很简单 原理很深刻
最新推荐文章于 2022-11-03 11:01:17 发布