父进程拷贝前半部分,子进程拷贝后半部分:最简单的方法
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include<errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MSG(msg) {printf("--%d",__LINE__);perror(msg);}
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if(pid<0)
{
MSG("fork");
return -1;
}
//父进程拷贝前半部分
if(pid>0)
{
int fp=open("./001.png",O_RDONLY);
if(fp<0)
{
MSG("open");
return -1;
}
int length;//获取文件大小
length=lseek(fp,0,SEEK_END);
lseek(fp,0,SEEK_SET);
int fp_w=open("./copy.png",O_WRONLY|O_CREAT|O_TRUNC,0664);
if(fp_w<0)
{
MSG("open");
return -1;
}
size_t res=0;
char arr[length/2];
res=read(fp,arr,sizeof(arr));
printf("res=%ld\n",res);
write(fp_w,arr,res);
close(fp);
close(fp_w);
}
//子进程拷贝后半部分
if(pid==0)
{
int fp=open("./001.png",O_RDONLY);
if(fp<0)
{
MSG("open");
return -1;
}
int length;//获取文件大小
length=lseek(fp,0,SEEK_END);
lseek(fp,length/2,SEEK_SET);
int fp_w=open("./copy.png",O_WRONLY|O_CREAT|O_APPEND,0664);
if(fp_w<0)
{
MSG("open");
return -1;
}
size_t res=0;
char arr[length-length/2];
res=read(fp,arr,sizeof(arr));
printf("res=%ld\n",res);
write(fp_w,arr,res);
close(fp);
close(fp_w);
}
return 0;
}
效果展示: