#include<myhead.h>
int main(int argc, const char *argv[])
{
if(argc!=4){
perror("外部传参错误\n");
return -1;
}
int fd = open("./1.txt",O_RDONLY,0664);
int len= lseek(fd,0,SEEK_END);//光标移动末尾计算长度
printf("len=%d\n",len);
pid_t pid=fork();
if(fd == -1)
{
perror("open");
return -1;
}
if(pid==0){
int fd1=open("./2.txt",O_RDWR|O_CREAT|O_TRUNC,0664);
if(fd1==-1)
{
perror("open");
return -1;
}
char buffer[1024];
lseek(fd,0,SEEK_SET);//光标重置开头
// int i =0;
// while(i<len/2){
read(fd,buffer,len/2);
write(fd1,buffer,len/2);
// i++;
// }
printf("子进程1复制内容:\n");
fputs(buffer,stdout);
sleep(3);
exit(EXIT_SUCCESS);
}else if(pid>0)
{
pid_t pid2 = fork();
if(pid2==0)
{
int fd2=open("./3.txt",O_RDWR|O_CREAT|O_TRUNC,0664);
if(fd2==-1)
{
perror("open");
return -1;
}
char buffer[1024];
lseek(fd,len/2,SEEK_SET);//光标移到内容一半
read(fd,buffer,len/2);
write(fd2,buffer,len/2);
printf("子进程2复制内容:\n");
fputs(buffer,stdout);
sleep(3);
exit(EXIT_SUCCESS);
}else if (pid2>0)
{
wait(NULL);
wait(NULL);
sleep(2);
exit(EXIT_SUCCESS);
}else{
perror("fork");
exit(EXIT_SUCCESS);
}
}
else{
perror("fork");
exit(EXIT_SUCCESS);
}
return 0;
}