#include<stdio.h>
#include<string.h>
#include<myhead.h>
int main(int argc, const char *argv[])
{
int fd =-1;
if((fd=open("./1.txt",O_RDONLY))==-1)
{
perror("open");
return -1;
}
int len=lseek(fd,0,SEEK_END);
close(fd);
pid_t pid;
pid = fork();
if(pid==0)
{
printf("我是大儿子\n");
int fd1;
int fd2;
fd1=open("./1.txt",O_RDONLY);
fd2=open("./4.txt",O_WRONLY);
char buff[100];
read(fd1,buff,len/2);
write(fd2,buff,len/2);
close(fd1);
close(fd2);
printf("前半段复制成功\n");
exit(EXIT_SUCCESS);//大儿子成功退出
}
else if(pid>0)
{
pid_t pid2;
pid2 = fork();
if(pid2==0)
{
printf("我是二儿子\n");
int fd3;
int fd4;
fd3=open("./1.txt",O_RDONLY);
fd4=open("./4.txt",O_WRONLY);
char buff1[100];
lseek(fd3,len/2,SEEK_SET);
lseek(fd4,len/2,SEEK_SET);
read(fd3,buff1,(len-len/2));
write(fd4,buff1,(len-len/2));
close(fd3);
close(fd4);
printf("后半段复制成功\n");
exit(EXIT_SUCCESS);//二儿子成功退出
}
else if(pid2>0)
{
printf("我是父亲 两个儿子都死了,我要不活了\n");
wait(NULL);
wait(NULL);//回收两个儿子的尸体
sleep(3);
exit(EXIT_SUCCESS);//父进程退出
}
}
else
{
perror("fork");
return -1;
}
while(1);
return 0;
}
创建3个进程,子进1程拷贝文件的前一半,子进程2拷贝后一半文件,父进程回收两个子进程资源。
于 2024-08-26 20:48:04 首次发布