IO day 4

news/2024/7/3 18:02:30 标签: 算法

1、使用两个进程完成两个文件的拷贝,父进程拷贝前一半内容,子进程拷贝后一半内容,并且父进程要阻塞回收子进程资源

#include <myhead.h>

int main(int argc, const char *argv[])
{
	char a[1] = {0};
	pid_t pid;
	pid = fork();//创建一个子进程
	int src = open(argv[1],O_RDONLY);
	if(src < 0)
	{
		perror("open error");
		return -1;
	}
	int dest = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0666);
	if(dest < 0)
	{
		perror("open error");
		return -1;
	}
    //计算机读取文件的字符个数
	int size = lseek(src,0,SEEK_END)-lseek(src,0,SEEK_SET);
	int halfsize = size / 2;
	ssize_t s;

	//开始打印

	if(pid < 0)
	{
		perror("fork error");
		return -1;
	}
	else if(pid == 0)//子进程
	{
		lseek(src,1,SEEK_SET);
		lseek(dest,1,SEEK_SET);
		for(int i = 0; i<halfsize; i++)
		{
			s = read(src,a,1);
			write(dest,a,s);
		}
	}
	else//父进程
	{
		lseek(src,0,SEEK_SET);
		lseek(dest,0,SEEK_SET);
		for(int i = 0; i<halfsize; i++)
		{
			s = read(src,a,1);
			write(dest,a,s);
		}
		//阻塞等待回收子进程资源
		wait(NULL);
	}

	return 0;
}

2、使用三个进程完成两个文件的拷贝,父进程拷贝前三分之一,子进程1拷贝中间三分之一,子进程2拷贝后三分之一,父进程要阻塞回收所有子进程资源

#include <myhead.h>

int main(int argc, const char *argv[])
{
	char a[1] = {0};
	pid_t pid;
	pid = fork();//创建一个子进程
	int src = open(argv[1],O_RDONLY);
	if(src < 0)
	{
		perror("open error");
		return -1;
	}
	int dest = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0666);
	if(dest < 0)
	{
		perror("open error");
		return -1;
	}
//计算机读取文件的字符个数
	int size = lseek(src,0,SEEK_END)-lseek(src,0,SEEK_SET);
	int len = size / 3;
	ssize_t s;

	//开始打印

	if(pid < 0)
	{
		perror("fork error");
		return -1;
	}
	else if(pid == 0)//子进程
	{
		lseek(src,1,SEEK_SET);
		lseek(dest,1,SEEK_SET);
		for(int i = 0; i<len; i++)
		{
			s = read(src,a,1);
			write(dest,a,s);
		}
	}
	else
	{
		pid_t pid2 = fork();//在父进程中再创建一个子进程
		if(pid2 < 0)
		{
			perror("fork error");
			return -1;
		}
		else if(pid2 == 0)
		{
			lseek(src,2,SEEK_SET);
			lseek(dest,2,SEEK_SET);
			for(int i = 0; i<len; i++)
			{
				s = read(src,a,1);
				write(dest,a,s);
			}
		}
		else//父进程
		{
			lseek(src,0,SEEK_SET);
			lseek(dest,0,SEEK_SET);
			for(int i = 0; i<len; i++)
			{
				s = read(src,a,1);
				write(dest,a,s);
			}
		//阻塞等待回收子进程资源
		wait(NULL);
		wait(NULL);
		}
	}

	return 0;
}

3、思维导图

 


http://www.niftyadmin.cn/n/4957111.html

相关文章

聊聊智慧城市的发展

目录 1.智慧城市应该是什么样子 2.智慧城市的实现方案 3.智慧城市会给人们造成的影响 1.智慧城市应该是什么样子 智慧城市是一种基于信息和通信技术的先进城市管理模式&#xff0c;旨在提高城市的运行效率、居民生活质量和可持续发展。智慧城市整合了各种智能设备、传感器、…

003-Nacos 2.1.x 注册实例源码分析

目录 Nacos 2.1.X注册实例入口接口流程Client 注册 事件处理 服务订阅入口 Nacos 2.1.X 注册实例 入口 com.alibaba.nacos.naming.remote.rpc.handler.InstanceRequestHandler#handleService service Service.newService(request.getNamespace(), request.getGroupName(), r…

【LeetCode-中等题】128. 最长连续序列

题目 题解一&#xff1a;HeshSet枚举 思路&#xff1a;先对数组进行set去重&#xff0c;核心就是&#xff0c;先找出临界值&#xff08;假设以最小临界为例&#xff0c;那么这个临界值自己就是最小值&#xff0c;&#xff09;&#xff0c;以临界值不断做加1操作&#xff0c;看…

T599聚合物电容器:在汽车应用中提供更长的使用寿命的解决方案

自从电子技术被引入汽车工业以来&#xff0c;汽车的技术含量一直在提升。诸多技术被应用在汽车上&#xff0c;使汽车的形象更接近于轮子上的超级计算机。更多传感器、更强大的计算能力和电力被装载到汽车上&#xff0c;汽车应用中的电子产品数量正在迅速增长。随着电动汽车和自…

手机技巧:分享五个非常实用的生活类APP

目录 1、我的桌面iScreen-桌面美化神器 2.Just Rain-创意听雨声APP 3.得言-美文句子神器 4、微手帐 5、暗盒-隐私保护神器 今天给大家整理5个非常实用的实用APP软件&#xff0c;感兴趣的朋友可以下载试试&#xff01; 1、我的桌面iScreen-桌面美化神器 我的桌面iScreen是一…

派森 #P125. 寻找反素数

描述 反素数&#xff0c;英文称作 emirp&#xff08;prime&#xff08;素数&#xff09;的左右颠倒拼写&#xff09;&#xff0c;是素数的一种。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭…

【MySQL系列】MySQL内置函数的学习

「前言」文章内容大致是对MySQL内置函数的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL的日期函数二、MySQL的字符串函数三、MySQL的数学函数四、 其它函数 一、MySQL的日期函数 常见的日期函数如下&#xff1a; 函数名称描述current…

CentOS 8.5修改安装包镜像源

1 备份原配置 cd /etc/yum.repos.d mkdir backup mv *.repo backup/2 下载镜像源 2.1 使用wget下载 wget http://mirrors.aliyun.com/repo/Centos-8.repo2.2 使用curl下载 我是安装的最小版本的系统&#xff0c;默认只有curl curl使用方法&#xff1a;https://www.ruanyife…