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

思维导图

相关推荐
py有趣2 小时前
LeetCode算法学习之两数之和 II - 输入有序数组
学习·算法·leetcode
BreezeJuvenile3 小时前
外设模块学习(15)——MQ-2烟雾气体传感器(STM32)
stm32·单片机·学习·mq-2·烟雾气体传感器
XH1.5 小时前
学习RT-thread(RT-thread定时器)
stm32·单片机·学习
2301_796512526 小时前
Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
java·学习·rust
故里21306 小时前
学习前端记录(二)21-40
学习
ThreeYear_s6 小时前
电力电子技术学习路径与FPGA/DSP技术结合方向(gemini生成)
学习·fpga开发
好奇龙猫7 小时前
【生活相关-日语-日本-入国&出国-海关&市役所(4)-办理手续】
学习·生活
sendnews7 小时前
红松小课如何成为激活老年人生活的新引擎?从兴趣学习到价值重塑!
学习·生活
The_Second_Coming7 小时前
ELK 学习笔记
笔记·学习·elk
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [kernel][time]timekeeping
linux·笔记·学习