#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t a;
a = fork();
if(a == 0)
{
int f1,f2;
f1 = open("./1.txt",O_RDONLY);
f2 = open("./01.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);
char arr;
int sum = 0;
while(read(f1,&arr,1)>0)
{
sum++;
}
close(f1);
f1 = open("./1.txt",O_RDONLY);
int i=0;
while(read(f1,&arr,1)>0)
{
i++;
if(i>sum/2)
{
char brr;
brr = arr;
write(f2,&brr,1);
}
}
close(f1);
close(f2);
printf("下半部分拷贝成功\n");
exit(EXIT_SUCCESS);
}
else if(a>0)
{
pid_t b;
b=fork();
if(b==0)
{
int f1,f2;
f1 = open("./1.txt",O_RDONLY);
f2 = open("./02.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);
char arr[10];
int sum = 0;
while(read(f1,arr,1)>0)
{
sum++;
}
close(f1);
f1 = open("./1.txt",O_RDONLY);
int i=0;
while(read(f1,arr,1)>0)
{
i++;
if(i<=sum/2)
{
char brr;
brr = *arr;
write(f2,&brr,sizeof(brr));
}
}
close(f1);
close(f2);
printf("上半部分拷贝成功\n");
exit(EXIT_SUCCESS);
}
else if(b>0)
{
wait(NULL);
wait(NULL);
sleep(3);
printf("分文件拷贝完成,进程关闭\n");
exit(EXIT_SUCCESS);
}
}
return 0;
}
创建3个线程,一个子线程拷贝文件的前一半,一个子线程拷贝后一半文件
最新推荐文章于 2024-08-31 21:54:30 发布