#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc,const char *argv[])
{
remove("2.jpeg");
char buff = ' ';
pid_t pid = fork();
if(0 < pid)
{ // 前半
int fp_r = open("1.jpeg",O_RDONLY);
int fp_w = open("2.jpeg",O_WRONLY|O_CREAT,0777);
if(-1 == fp_r || -1 == fp_w)
{
perror("parent process");
return -1;
}
int mid = lseek(fp_r,0,SEEK_END) / 2;
lseek(fp_r,0,SEEK_SET);
// lseek(fp_w,0,SEEK_SET);
for(int i = 1;i <= mid;i++)
{
read(fp_r,&buff,1);
write(fp_w,&buff,1);
}
close(fp_r);
close(fp_w);
printf("前半部分完成\n");
}
else if(0 == pid)
{ // 后半
int fp_r = open("1.jpeg",O_RDONLY);
int fp_w = open("2.jpeg",O_WRONLY|O_CREAT,0777);
if(-1 == fp_r || -1 == fp_w)
{
perror("child process");
return -1;
}
int mid = lseek(fp_r,0,SEEK_END) / 2;
lseek(fp_r,mid,SEEK_SET);
lseek(fp_w,mid,SEEK_SET);
while( 0 < read(fp_r,&buff,1) )
{
write(fp_w,&buff,1);
}
close(fp_r);
close(fp_w);
printf("后半部分完成\n");
}
else
{
perror("fork");
return -1;
}
return 0;
}