学习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;  
}

思维导图

相关推荐
ASKED_20193 小时前
Langchain学习笔记一 -基础模块以及架构概览
笔记·学习·langchain
(❁´◡`❁)Jimmy(❁´◡`❁)4 小时前
Exgcd 学习笔记
笔记·学习·算法
云小逸5 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
盐焗西兰花8 小时前
鸿蒙学习实战之路-Reader Kit构建阅读器最佳实践
学习·华为·harmonyos
深蓝海拓8 小时前
PySide6从0开始学习的笔记(二十七) 日志管理
笔记·python·学习·pyqt
慎独4138 小时前
科学赋能,让孩子专注高效爱上学习
学习
LGL6030A8 小时前
Java学习历程26——线程安全
java·开发语言·学习
学历真的很重要9 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程管理(详解版)
学习·职场和发展·系统架构·系统架构师
Nebula_g9 小时前
线程进阶: 无人机自动防空平台开发教程(更新)
java·开发语言·数据结构·学习·算法·无人机
星期五不见面10 小时前
机器人学习!(二)ROS2-节点(7)2026/02/03
学习