1.
#include <my_head.h>
int main()
{
//定义一个文件描述符
int fd1 = -1;
//打开文件fd1(读数据的文件)
if((fd1=open("./test.txt",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
int fd2 = -1;
//打开文件fd2(写入数据的文件)
if((fd2=open("./test_cpy.txt",O_WRONLY|O_CREAT|O_TRUNC,0666))==-1)
{
perror("open error");
return -1;
}
//求出源文件的大小
off_t file_size=lseek(fd1,0,SEEK_END);
printf("file_size=%ld\n",file_size);
int file_half= file_size/2; //求出长度的一半
//开始创建父子进程
pid_t pid=-1;
pid=fork();
lseek(fd1,0,SEEK_SET); //将光标移动到文件头
if(pid>0)
{
//执行的代码只能是父进程
printf("这是父进程,我的子进程号为:%d,自身进程号为:%d,父进程号为:%d\n",pid,getpid(),getppid());
printf("请儿子赴死\n");
sleep(4); // 先让父进程进入睡眠态,执行子进程
wait(NULL);
ssize_t a;
char buf[32]="";//定义一个字符串来传递写入数据的内容
//循环从第一个文件中读取数据
//a的读取文件1的个数
while((a=read(fd1,buf,sizeof(buf)))>0)
{
//从第一个文件中读取的数据全部输入到第二个文件中
write(fd2,buf,a);
}
sleep(3);
printf("收尸完毕,准备趋势\n");
_exit(EXIT_SUCCESS);
}
else if(0 == pid)
{
printf("这是子进程,自身进程号为:%d,父进程号为:%d\n",getpid(),getppid());
sleep(3);
ssize_t b;
char buf[32]="";
while((b=read(fd1,buf,sizeof(buf)))>0)
{
//从第一个文件中读取的数据全部输入到第二个文件中
write(fd2,buf,b);
off_t cur_off = lseek(fd1,0,SEEK_CUR);
if(cur_off == file_half)
{
break;
}
printf("爸爸,我滴任务完成啦!\n");
exit(EXIT_SUCCESS);
}
}else{
perror("fork");
return -1;
}
close(fd1);
close(fd2);
return 0;
}
2.
#include <my_head.h>
int main()
{
//定义一个文件描述符
int fd1 = -1;
//打开文件fd1(读数据的文件)
if((fd1=open("./test.txt",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
int fd2 = -1;
//打开文件fd2(写入数据的文件)
if((fd2=open("./test_cpy.txt",O_WRONLY|O_CREAT|O_TRUNC,0666))==-1)
{
perror("open error");
return -1;
}
//求出源文件的大小
off_t file_size=lseek(fd1,0,SEEK_END);
printf("file_size=%ld\n",file_size);
int file_half= file_size/2; //求出长度的一半
//开始创建父子进程
pid_t pid=-1;
pid=fork(); //创建出一个子进程
lseek(fd1,0,SEEK_SET); //将光标移动到文件头
if(pid<0)
{
perror("fork");
return -1;
}
else if(0 == pid)
{
printf("我是大儿子\n");
sleep(3);
ssize_t b;
char buf[32]="";
while((b=read(fd1,buf,sizeof(buf)))>0)
{
//从第一个文件中读取的数据全部输入到第二个文件中
write(fd2,buf,b);
off_t cur_off = lseek(fd1,0,SEEK_CUR);
if(cur_off == file_half)
{
break;
}
printf("爸爸,我滴任务完成啦!\n");
exit(EXIT_SUCCESS);
}
}else
{
//执行的代码只能是父进程
printf("这是父进程\n");
printf("请儿子赴死!\n");
pid_t pid1 =-1;
pid1=fork();
if(pid1<0)
{
perror("fork");
return -1;
}else if(pid1==0)
{
printf("我是老二\n");
sleep(4);
wait(NULL);
ssize_t a;
char buf[32]="";//定义一个字符串来传递写入数据的内容
while((a=read(fd1,buf,sizeof(buf)))>0)
{
write(fd2,buf,a);
}
sleep(3);
printf("收尸完毕,我去意已决!\n");
exit(EXIT_SUCCESS);
}else
{
printf("我是父进程\n");
wait(NULL);
wait(NULL);
}
}
close(fd1);
close(fd2);
return 0;
}