学习了mmap以后,实现一个简单的小程序,进行多个进程对一个文件进行拷贝。

Linux mmap共享内存学习可以参考我的另一篇博客:传送门

实现思想

我们可以将原来的文件利用mmap分成多个段分别进行传输。

实现代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<sys/mman.h>
#include<fcntl.h>int main(int argc,char *argv[])
{char *input,*output;if(argc<2){printf("You should input file name\n");exit(1);}else if(argc>3){printf("too many arguments\n");exit(1);}else if(3 == argc){input=argv[1];output=argv[2];}else if(2 == argc){input=argv[1];output=strcat(input,".out");}int fd1 = open(input,O_RDONLY);if(-1 == fd1){perror("input file open error:");exit(1);}int fd2 = open(output,O_RDWR | O_CREAT | O_TRUNC,0644);if(-1 == fd2){perror("output file open error:");exit(1);}int file_size = lseek(fd1,0,SEEK_END);int ret = ftruncate(fd2,file_size);if(-1 == ret){perror("ftruncate ouput file error:");exit(1);}input = mmap(NULL, file_size, PROT_READ, MAP_SHARED, fd1, 0);if(MAP_FAILED == input){perror("input mmap error:");exit(1);}close(fd1);output = mmap(NULL, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0);if(MAP_FAILED == output){perror("output mmap error:");exit(1);}close(fd2);int psize = file_size / 4;pid_t pid;for(int son=0; son<4; ++son){pid = fork();if(-1 == pid){perror("fork error:");exit(1);}else if(0 == pid){memcpy(output+son*psize, input+son*psize, psize);exit(0);}}if(file_size > psize * 4){memcpy(output+4*psize,input+4*psize,file_size-psize*4);}ret = munmap(input, file_size);if(-1 == ret){perror("close input mmap error:");exit(1);}ret = munmap(output, file_size);if(-1 == ret){perror("close output mmap error:");exit(1);}return 0;
}

Linux多进程拷贝文件相关推荐

  1. 两个linux之间拷贝文件及文件夹

    Linux为我们提供了两个用于文件copy的命令.一个是cp,一个是scp,可是他们略有不同,cp 主要是用于在同一台电脑上,在不同的文件夹之间来回copy文件 scp 主要是在不同的Linux系统之 ...

  2. linux传文件到其他用户,Linux怎样拷贝文件到其他用户

    正在Linux体系外,不少人没有知叙差别的用户之间要若何拷贝文件,其真复造文件到另外一个用户的要领有不少,昨天小编便给各人引见高Linux拷贝文件到其余用户的二种要领,一同去教习高吧. 情形: foo ...

  3. linux aio拷贝文件,Linux通过AIO进行异步读文件

    下面列出源代码: #include #include #include #include #include #include #include #include static char *memBuf ...

  4. 两个linux系统拷贝文件,两台linux文件拷贝

    scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话. 最简单的 ...

  5. Linux远方拷贝文件指令,windows与linux系统互相拷贝文件借助PSCP命令实现

    借助 PSCP 命令可以实现文件的互拷: 1.下载pscp.exe 文件 2.如果想在所有目录可以执行,请更改环境变量. windows执行指令时直接到这些目录去寻找可执行文件. 设置环境变量的方法: ...

  6. linux系统拷贝文件到桌面,centos拷贝文件夹命令

    如何在CentOS系统利用命令行操作文件以及文件夹 下面总结一些linux,CentOS下面常用的命令: cd pwd NO1. 显示当前路径 [root@rehat root]# pwd NO2. ...

  7. hylan:linux实用 拷贝文件到U盘

    写两点实用的: 1.linux如何进入纯命令行界面 进入快捷键:CTRL+ ALT + F1~F6  (分别对应6个终端) 退出快捷键:CTRL+ ALT + F7 备注:init打开6个终端 tty ...

  8. 从Linux 服务器拷贝文件到Windows 本地

    数据库备份文件拷贝到本地 下载PuTTY软件,并在C盘安装目录中,找到pscp.exe文件,将pscp.exe的路径加入到系统环境变量Path中,                          官 ...

  9. linux下拷贝文件的时候出现权限不够,如何解决

    首先是ctrl+alt+t 打开一个终端. 然后运行命令 sudo nautilus  . 就可以打开一个具有管理员权限的文件管理器啦. 然后就可以在不切换到管理员的条件下拷贝文件啦.

最新文章

  1. Python分析离散心率信号(上)
  2. python怎么导入txt数据库_Python导入txt数据到mysql的方法
  3. es6基础0x012:Map
  4. (59) 解决在列表视图复制导致打开详细内容
  5. 六、PHP框架Laravel学习笔记——响应设置和重定向
  6. 我并不想劝人创业当老板
  7. 在win10环境中安装xilinx vivado IDE时出现的问题及解决方法
  8. 产品经理该如何做竞品分析
  9. mysql数据库关联查询慢_mysql数据库多表关联查询的慢SQL优化
  10. 解决黑苹果核显HD4400开机卡在“io console user: gio screen lock state 3”问题/HD4400核显只有7M问题
  11. 玩数字域名投资有风险吗 风险与机遇并存
  12. 社招+校招被技术面试完虐系列之多方位考查点
  13. 【教程】Teambition中行云及飞流实现自定义构建部署
  14. SpringCloud 基本使用
  15. 背景亮度css,用CSS改变背景的亮度
  16. 学前端要多久?学前端要多久?学前端多少钱
  17. 大众美团服务链监控CAT
  18. 大学生变身建筑工人:在家隔离的美国学生们,正在Minecraft中复现一座座大学校园...
  19. Echarts之双横向柱状对比图
  20. 职场「数字人」不吃不睡007工作制,你「卷」得过它们吗?

热门文章

  1. 正则表达式强化,爬虫练习
  2. SVN 定时 更新代码 Demo
  3. JavaScript:Browser 对象
  4. shell脚本1——变量 $、read、``
  5. VM克隆之后启动eth0找不到eth0:unknown interface:no such device
  6. android_Text
  7. wps单机无网络版_单平台销量破百万,这个国产单机系列要出网游,还要上主机...
  8. 小程序 foreach_【第2106期】小程序依赖分析实践
  9. 经过路由无法找到计算机,电脑无法启动服务提示系统找不到指定的路径(图)
  10. dll 源码_【技术分享】 | 一个JAVA内存马的源码分析