#include<myhead.h>
int main(int argc, const char *argv[])
{
//定义两个文件句柄
int srcfp=-1;
int destfp=-1;
//创建子进程
pid_t pid=fork();
//在父进程中打开和复制一半的文件
int len=0;
if(pid>0)
{
//打开源文件
if((srcfp=open("./test.txt",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
//打开目标文件
if((destfp=open("./copy.txt",O_RDWR|O_CREAT|O_TRUNC,0664))==-1)
{
perror("open error");
return -1;
}
//获取文件的大小
len=lseek(srcfp,0,SEEK_END);
//将光标移回原位
lseek(srcfp,0,SEEK_SET);
int res=0;
int rbuf[128];
int s=0;
while(1)
{
res=read(srcfp,&rbuf,sizeof(rbuf));
s+=res;
if(s<=len/2)
{
write(destfp,&rbuf,res);
}
else
break;
}
//关闭文件
close(srcfp);
close(destfp);
}
//在子程序中复制另一半
else if(pid==0)
{
//打开源文件
if((srcfp=open("./test.txt",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
//打开目标文件
if((destfp=open("./copy.txt",O_RDWR|O_APPEND|O_CREAT),0664)==-1)
{
perror("open error");
return -1;
}
lseek(srcfp,len/2,SEEK_SET);
lseek(destfp,0,SEEK_END);
int wbuf[128];
int res=0;
while(res=read(srcfp,&wbuf,sizeof(wbuf)))
{
write(destfp,&wbuf,res);
}
close(srcfp);
close(destfp);
}
return 0;
}