#include <myhead.h>
//
//创建3个进程
//子进程1拷贝文件的一半
//子进程2拷贝后一半文件
//父进程回收两个子进程的资源
//
//
int main(int argc, const char *argv[])
{
// ssize_t len;
pid_t pid1;
pid1 =fork();
if(pid1==0)//子进程1
{
int fd;
char arr[100];
fd=open("./1.txt",O_RDONLY);
if(fd==-1)
{
perror("open");
return -1;
}
int len=read(fd,arr,sizeof(arr));
if(len==-1)
{
printf("读取字节大小失败\n");
return -1;
}
int i,j=0;
char Arr[100];
for(i=0;i<len;i++)
{
if(arr[i]!=' '&&arr[i]!='\n')
{
Arr[j++]=arr[i];
}
}
write(1,Arr,j/2);
putchar(10);
close(fd);
exit(EXIT_SUCCESS);//子进程1退出
}
else if(pid1>0)
{
pid_t pid2;
pid2=fork();
if(pid2==0)//子进程2
{
int fd2;
char brr[100];
fd2=open("./1.txt",O_RDONLY);
if(fd2==-1)
{
perror("open2");
return -1;
}
int len=read(fd2,brr,sizeof(brr));
if(len==-1)
{
printf("子进程2读取文本字符大小失败\n");
return -1;
}
int i,j=0;
char Brr[100];
for(i=0;i<len;i++)
{
if(brr[i]!=' '&&brr[i]!='\n')
{
Brr[j++]=brr[i];//减掉换行和空格字符后带入新数组
}
}
sleep(3);
write(1,(Brr+j/2),j/2+1);//多加一位'\0'
putchar(10);
close(fd2);
exit(EXIT_SUCCESS);//子进程2退出
}
else if(pid2>0)//父进程
{
wait(NULL);
wait(NULL);
sleep(2);
exit(EXIT_SUCCESS);//父进程退出
}
}
else
{
perror("fork");
exit(EXIT_FAILURE);
}
return 0;
}
线程思维导图