多进程编程

server/2024/10/19 14:15:45/

 使用父子进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,两个进程同时进行

#include<myhead.h>//获取拷贝文件的字节数
int get_file_len(const char* file1,const char* file2)
{//以只读形式打开需要读取的文件int fd1 = open(file1,O_RDONLY);//判断文件是否打开成功if(fd1==-1){perror("open error");return -1;}//创建需要写入的文件int fd2 = open(file2,O_WRONLY|O_TRUNC|O_CREAT,0664);if(fd2==-1){perror("open error");return -1;}//将光标定位到文件末尾获取文件字节数int len = lseek(fd1,0,SEEK_END);//关闭文件close(fd1);close(fd2);//返回字节数return len;
}//定义拷贝文件的函数
int copy_file(const char* file1,const char* file2,int start,int len)
{//以只读形式打开文件int fd1 = open(file1,O_RDONLY);//判断文件是否打开成功if(fd1==-1){perror("open error");return -1;}以只写形式打开文件int fd2=open(file2,O_WRONLY);//将光标偏移到需要读取和写入的位置lseek(fd1,start,SEEK_SET);lseek(fd2,start,SEEK_SET);//定义字符数组存储读取到的数据char buf[100]="";//计算读取到的字节数int sum=0;while(1){//清空数组bzero(buf,sizeof(buf));//获取读取到的字节数int res = read(fd1,buf,sizeof(buf));//计算字节数的和sum += res;//将最后一次读取到的数据写入文件if(res==0||sum>=len){write(fd2,buf,res-(sum-len));break;}//读取到多少字节就写入多少字节write(fd2,buf,res);}//关闭文件close(fd1);close(fd2);
}typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;int main(int argc, const char *argv[])
{//当外部参数不足时提示if(argc != 3){printf("文件参数不足\n");return -1;}//函数调用获取源文件字节数int len=get_file_len(argv[1],argv[2]);//创建子进程pid_t pid;pid=fork();//父进程执行的内容if(pid>0){//获取父进程进程号printf("父进程进程号为:%d\n",getpid());//函数调用将前一半字节拷贝进目标文件中copy_file(argv[1],argv[2],0,len/2);}//子进程执行内容else if(pid==0){//获取子进程进程号printf("子进程进程号为:%d\n",getpid());//将后一半字节拷贝进目标文件copy_file(argv[1],argv[2],len/2,len-len/2);//结束子进程exit(0);}//阻塞等待子进程结束wait(NULL);printf("拷贝成功\n");return 0;
}

 思维导图:


http://www.ppmy.cn/server/133064.html

相关文章

理解智能合约:区块链在Web3中的运作机制

随着区块链技术的不断发展&#xff0c;“智能合约”这一概念变得越来越重要。智能合约是区块链应用的核心之一&#xff0c;正在推动Web3的发展&#xff0c;为数字世界带来了前所未有的自动化和信任机制。本文将深入探讨智能合约的基本原理、运作机制&#xff0c;以及它在Web3生…

SpringAop学习笔记

SpringAop学习笔记 文章目录 SpringAop学习笔记1. 面向切面编程&#xff08;AOP&#xff09;1.1 代理模式1.2 静态代理1.3 动态代理 2. AOP概念及相关术语2.1 概述2.2 相关术语①横切关注点②通知&#xff08;增强&#xff09;③切面④目标⑤代理⑥连接点⑦切入点 2.3 作用 3. …

贝叶斯公式

内容来源 贝叶斯统计&#xff08;第二版&#xff09;中国统计出版社 贝叶斯公式的密度函数形式 p ( x ∣ θ ) p(x|\theta) p(x∣θ) 表示随机变量 θ \theta θ 给定某个值时&#xff0c;总体指标 X X X 的条件分布 π ( θ ) \pi(\theta) π(θ) 根据参数 θ \theta θ…

【RTT-Studio】详细使用教程十七:FreeModbus通信--LCD

文章目录 一、简介二、Modbus通信三、LCD通信四、配置FreeModbus通信协议四、完整代码五、测试验证 一、简介 Modbus协议是一种用于工业控制的网络通讯协议&#xff0c;可以片面的理解为&#xff0c;Modbus协议一种机器与机器之间进行数据、信息传递的一种格式规范。   Modbu…

【LeetCode】每日一题 2024_10_15 三角形的最大高度(枚举、模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;三角形的最大高度 代码与解题思路 久违的简单题 这道题读完题目其实不难想到有两条路可以走&#xff1a; 1、题目很明显只有两种情况&#xff0c;枚举是第一个球是红球还是蓝球这两种情…

Java项目-基于Springboot的智慧养老平台项目(源码+文档).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、SpringClud、Vue、Mybaits Plus、ELementUI工具&…

视频美颜SDK的实现要点:直播美颜平台的搭建攻略

本篇文章&#xff0c;小编将详细介绍如何使用视频美颜SDK构建一个稳定且功能强大的直播美颜平台。 一、视频美颜SDK的基础架构 视频美颜SDK的核心在于其对图像的实时处理能力&#xff0c;包括磨皮、美白、瘦脸、增强五官等功能。在具体实现上&#xff0c;SDK通常通过对摄像头…

【scene_manager_msgs】ROS2 自定义消息、服务的包

scene_manager_msgs 在ROS 1向ROS 2迁移的过程中&#xff0c;有些依赖项发生了变化&#xff0c;这是因为ROS 2的通信框架和工具链与ROS 1不同&#xff0c;尤其在消息、服务和动作生成方面有了一些新的方法和库。 动作库 如果你的ROS 1包依赖于actionlib或actionlib_msgs&…