学习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·运维·学习
我命由我123451 小时前
Windows 操作系统 - 启用 D 盘虚拟内存
java·运维·服务器·windows·学习·java-ee·运维开发
平头哥技术团队1 小时前
Day 13 | 调 line-height 和 margin:三处间距让名片页脱离模板感
开发语言·前端·javascript·学习·html5
具身AGI1 小时前
第一视角数据从哪来,物理AI 人类学习路线 的入口
人工智能·深度学习·学习
python零基础入门小白2 小时前
LangGraph智能体实战:如何用Langfuse构建AI运行时全链路可观测系统?
人工智能·学习·ai·chatgpt·程序员·大模型·智能体
z23456d3 小时前
第三十九天学习心得
学习
水巷石子3 小时前
学习langChain4j的第二天,体验springBoot中的starter
java·spring boot·学习·spring·langchain4j
程序员梅雨4 小时前
微服务学习最终篇: Elasticsearch
学习·elasticsearch·微服务
clorinda4 小时前
PyTorch 手写数字识别学习笔记
pytorch·笔记·学习
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(63):SAMem——把经验记忆细化为带长期价值的状态—Thought
论文阅读·人工智能·学习·开源·github