#include <myhead.h>
//文件的长度
int get_len()
{
//定义文件描述符
int srcfd = -1;
//打开文件
if((srcfd = open("./01test.txt",O_RDONLY)) == -1)
{
perror("open error");
return -1;
}
int len = lseek(srcfd, 0, SEEK_END);
//关闭文件
close(srcfd);
return len;
}
int main(int argc, const char *argv[])
{
//定义一个变量
int pid1 = -1;
//打开被拷贝的文件
//定义被拷贝的文件描述符
int srcfd = -1;
//打开文件
if((srcfd = open("./01test.txt", O_RDONLY)) == -1)
{
perror("open error");
return -1;
}
//定义一个拷贝的文件描述符
int destfd = -1;
if((destfd = open("./02test.txt", O_WRONLY|O_CREAT|O_TRUNC, 0664)) == -1)
{
perror("destfile1 open error");
return -1;
}
//定义一个容器
char wbuf[128] = "";
//获取文件的长度
int len = get_len();
printf("len = %d\n", len);
//创建子进程
pid1 = fork();
if(pid1 < 0)
{
printf("fork error\n");
}
else if(pid1 == 0)
{
lseek(srcfd, 0, SEEK_SET);
//读取上半部分的内容
int res;
while((res = read(srcfd, wbuf, sizeof(wbuf))) > 0)
{
write(destfd, wbuf, len/2);
write(1, wbuf, len/2);
}
//关闭子进程
exit(EXIT_SUCCESS);
}
else
{
//定义一个变量
int pid2 = -1;
pid2 = fork();
if(pid2 < 0)
{
printf("destfile2 fork error\n");
return -1;
}
else if(pid2 == 0)
{
sleep(1);
lseek(srcfd, len-(len/2), SEEK_SET);
int res;
//读取下半部分的内容
while((res = read(srcfd, wbuf, sizeof(wbuf))) > 0)
{
write(destfd, wbuf, len-(len/2));
write(1, wbuf, len-(len/2));
}
//关闭子进程
exit(EXIT_SUCCESS);
}
else
{
//回收子进程资源
wait(NULL);
wait(NULL);
}
}
close(srcfd);
close(destfd);
return 0;
}
运行结果
思维导图: