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

思维导图

相关推荐
_Kayo_22 分钟前
node.js 学习笔记3 HTTP
笔记·学习
CCCC13101633 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9364 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头4 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑5 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA6 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
杜子不疼.7 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖7 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨8 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb8 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa