学习IO的第四天

作业 : 使用两个子进程完成两个文件的拷贝,子进程1拷贝前一半内容,子进程2拷贝后一般内容,父进程用于回收两个子进程的资源

cpp 复制代码
#include <head.h>

int main(int argc, const char *argv[])
{
	int rd = -1;
	if((rd=open("./01_test.c",O_RDONLY))==-1)  //打开一个文件以只读的方式
	{
		perror("open error\n");
		return -1;
	}
	int wd = -1;                          //以写的方式打开一个文件,若文件不存在则创建,存在则清空
	if((wd=open("./text.txt",O_WRONLY|O_CREAT|O_TRUNC, 0664))==-1)
	{
		perror("write error\n");
		return -1;
	}

	char res[128]="";               //定义一个字符串当中转站

	int seek = lseek(rd,0,SEEK_END);   //定义seek获取文件内容的大小,lseek函数的返回值是文件的大小

	int count = 0;                 //定义count来接收read的返回值

	int pid = fork();              //创建子进程

	if(pid > 0)                    //如果pid大于0则为父进程  
	{
		//父进程
		//回收子进程的资源
		wait(NULL);
		wait(NULL);
		int pid2 = fork();         //在父进程中再创建子进程
		if(pid2>0)  //父进程
		{ 

		}
		else if(pid2 == 0)    //再次创建的子进程
		{
			//子2进程			
			lseek(rd,0,SEEK_SET);   //将光标偏移到文件开头
			while(1)
			{
				if(seek/2 == lseek(rd,0,SEEK_CUR)) //如果文件偏移到文件中间,则跳出循环
				{
					break;
				}
				count=read(rd,res,sizeof(res));   //读写文件
				write(wd,res,count);
			}
			exit(EXIT_SUCCESS);             //退出子进程
		}
		else
		{
			perror("pids error\n");
			return -1;
		}
	}
	else if(pid == 0)  //子2进程
	{ 
		//休眠1秒等另一个进程拷贝完毕
		sleep(1);
		//光标移动到文件中央
		lseek(rd, 0, SEEK_CUR);
		while(1)
		{
			if(count==0)   //如果read的返回值为0,说明文件读取完毕,跳出循环
			{
				break;
			}
			count = read(rd,res,sizeof(res));  //读写文件
			write(wd,res,count);
		}
		exit(EXIT_SUCCESS);    //退出子进程
	} 
	else
	{
		perror("pidx error\n");
		return -1;
	}
	
	printf("拷贝完成\n");

	close(wd);
	close(rd);

	return 0;  
}

思维导图

相关推荐
其实防守也摸鱼1 分钟前
Linux文本处理命令理论学习
linux·服务器·前端·数据库·sql·学习·安全
dadaobusi8 分钟前
学习: Triton
学习
一条泥憨鱼10 分钟前
【计算机网络】| 从 MAC 到 NAT 的跨网段通信全链路
服务器·网络·学习·计算机网络·macos
miao_0v018 分钟前
10.20任务
学习·个人开发
Generalzy33 分钟前
Qt 桌面开发入门:PySide6 学习路线、架构原理与技术选型
笔记·python·学习
想做小南娘,发现自己是女生喵2 小时前
第二周学习文档 Linux C 文件操作
linux·c语言·学习
潜心一志2 小时前
图像预处理—— 图像的变换与校正(理论)
学习·计算机视觉
nmjkhome2 小时前
26 疲劳的几个重要概念(第51课)-solid works simulation
学习
程序猿乐锅2 小时前
【从0-1学习Python | 第六篇】 Python 函数:定义、参数与返回值
开发语言·python·学习
燕落南枝2 小时前
HTML 学习:input 单选、复选与文件域详解
服务器·学习·html