文章目录

  • 程序思路
  • 完整代码
  • 运行效果

程序思路

1. 指定创建子进程的个数2. 打开源文件3. 打开目的文件, 不存在则创建4. 获取文件大小5. 根据文件大小拓展目标文件6. 为源文件创建映射7. 为目标文件创建映射8. 求出每个子进程该拷贝的字节数9. 创建N个子进程10. 子进程完成分块拷贝(注意最后一个子进程拷贝起始位置)11. 释放映射区

完整代码

#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <cstring>int main(int argc, char *argv[])
{   //1. 指定创建子进程的个数int proNum = 5;//2. 打开源文件int fd_r = open(argv[1], O_RDONLY);if(fd_r == -1){std::cout << "open error" << std::endl;exit(1);}//3. 打开目的文件, 不存在则创建int fd_w = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0666);if(fd_w == -1){std::cout << "open error" << std::endl;exit(1);}/*4. 获取文件大小*--------------* 相比于seek速度更快* */struct stat statbuf;stat(argv[1], &statbuf);int size = statbuf.st_size;//5. 根据文件大小拓展目标文件int ret = ftruncate(fd_w, size);if(ret == -1){std::cout << "ftruncate error" << std::endl;exit(1);}std::cout << argv[1] <<"的文件大小为:" << size << std::endl;//6. 为源文件创建映射char *mmp_r = (char *)mmap(NULL, size, PROT_READ, MAP_SHARED, fd_r, 0);if(mmp_r == MAP_FAILED){std::cout << "mmap error" << std::endl;exit(1);}close(fd_r);//7. 为目标文件创建映射char *mmp_w = (char *)mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd_w, 0);if(mmp_w == MAP_FAILED){std::cout << "mmap error" << std::endl;exit(1);}//8. 求出每个子进程该拷贝的字节数int size_sp = size / proNum;int size_sle = size % proNum;//9. 创建N个子进程int i;for(i=0; i<proNum ; ++i){pid_t pid = fork();if(pid == -1){std::cout << "fork error" << std::endl;exit(1);}else if(pid == 0){ // 子进程/* 拷贝文件内容 */if(i < proNum - 1){memcpy(mmp_w+i*size_sp, mmp_r+i*size_sp, size_sp);std::cout << "我是进程" << i << "拷贝文件大小为:" << size_sp<< std::endl;}else{memcpy(mmp_w+i*size_sp, mmp_r+i*size_sp, size_sp+size_sle);std::cout << "我是进程" << i << "拷贝文件大小为:" << size_sp+size_sle << std::endl;}break;}}munmap(mmp_r, size);munmap(mmp_w, size);return 0;
}

运行效果


C++案例 | C++使用mmap实现多进程拷贝文件相关推荐

  1. Linux多进程拷贝文件

    学习了mmap以后,实现一个简单的小程序,进行多个进程对一个文件进行拷贝. Linux mmap共享内存学习可以参考我的另一篇博客:传送门 实现思想 我们可以将原来的文件利用mmap分成多个段分别进行 ...

  2. python3多进程写时拷贝_python利用进程池,多进程拷贝文件

    #!/usr/bin/evn python #Author:ELSON_ZENG import os,time import multiprocessing def copy_file(queue, ...

  3. python多进程读同一个文件_python 多进程读写文件

    import time from multiprocessing import Process, JoinableQueue, cpu_count import csv ####处理一条数据的方法 d ...

  4. 局域网内不定期拷贝文件到所有机器上怎么实现?

    点量软件有遇到到过客户的这类需求:在一个局域网内需要定期把一些更新的文件拷贝到不同的机器上,每次文件从几百兆--几个G不等,怎么才能保证在局域网内部,能定期更新而且能做到完全的复制呢?点量BT下载插件 ...

  5. python 利用多进程实现文件的拷贝

    python 利用多进程实现文件的拷贝 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37338590/article/details/784 ...

  6. 什么是mmap?零拷贝?DMA?

    <Linux Zero-copy零拷贝技术全面揭秘> <什么是mmap?零拷贝?DMA?> <Linux C语言:用零拷贝技术实现TCP代理(源代码+测试服务端客户端代码 ...

  7. 【python3】 多线程以及多进程拷贝U盘图片数据

    [python3] 多线程以及多进程拷贝U盘图片数据 1.背景 2.代码 3.运行结果及分析 1.背景 在做深度学习的时候,需要手动拷贝很多图片数据,发现U盘质量很差劲,拷贝非常耗时间,如下图: 于是 ...

  8. mmap拷贝文件与用常规文件IO拷贝文件效率对比

      通常我们读写文件时,都是用系统提供的write和read函数,但是我们都知道文件IO函数操作文件流效率要低于mmap,因为mmap相对write/read省去将数据拷贝到用户态的操作.那么他们之间 ...

  9. 【Google Play】APK 扩展包 ( 2021年09月 最新处理方案 | 文件准备 | 拷贝文件至内置存储 | 解压及使用扩展文件 )

    文章目录 前言 一.文件准备 二.拷贝文件至内置存储 三.解压及使用扩展文件 四.博客资源 前言 在上一篇博客 [Google Play]APK 扩展包 ( 2021年09月02日最新处理方案 | 内 ...

最新文章

  1. SQL Server使用侦听器IP访问时遇到The target principal name is incorrect. Cannot generate SSPI context...
  2. Apache Commons Pool 故事一则 专题
  3. (一)机器学习数据处理
  4. ThinkPHP- 3.1
  5. 安装linux出现基础系统出错,Linux系统出错提示信息详解
  6. Linux-Shell脚本学习心得(第二天)
  7. 2018CES智能硬件与新技术盘点
  8. Java 文件操作-RandomAccessFile
  9. 我为什么不无偿加班,你也不应该
  10. linux云自动化运维基础知识4(系统结构,vim,管理输入输出,正则表达式)
  11. 电脑连接上无线网却没有网,手机却能上网怎么解决
  12. C语言教程-Turbo C
  13. Win10使用以前的图片查看器
  14. java网络打印机_如何使用Java在网络打印机上进行打印?
  15. 职业投资策略(转贴)
  16. web前端设计与开发期末作品/期末大作业:我的家乡——走进达州(4页) HTML+CSS+JavaScript
  17. 国外优秀免费空间对比APPFOG VS TECHNETCAL
  18. 解读温度传感器应用于物联网+冷链行业
  19. 华为机试题:HJ108 求最小公倍数(python)
  20. qlv视频转换器免费版_腾讯视频素材下载和转换教程

热门文章

  1. PCIE中的加扰与解扰
  2. 道,术,象(万物皆有规律)
  3. 2020年宇通大量裁人论坛_重磅丨 2020年中国经济高峰论坛正式启动!
  4. golang 通过go get | go mod download下载安装包
  5. 【番杰的小技巧笔记】如何通过嘉立创免费打印立创EDA设计的PCB
  6. 【程序人生】怎样养生?关于中医的核心思想,经典著作,与西医理念的对比,优缺点
  7. 有道云笔记的快速剪报
  8. 2013计算机应用基础试题及答案,2013计算机应用基础(人教版)期末考试试题及答案 .doc...
  9. EDI的国内外发展现状
  10. 基于大数据的情绪分析(二)