mmap多进程拷贝大文件

本文介绍了如何利用mmap函数在多个进程中高效地拷贝大文件。重点讲解了mmap的函数原型、参数含义,特别是MAP_SHARED和MAP_PRIVATE标志位的区别,并强调了映射偏移量必须为4K的整数倍。最后提供了一个通过映射区实现多进程文件复制的例子。
摘要由CSDN通过智能技术生成

mmap函数创建映射区

函数原型:

void *mmap(void *addr, size_t length, int port, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);

头文件:

#include <sys/mman.h>

retrun value:
  成功: 返回创建的映射区首地址.
  失败: MAP_FAILED宏.

参数:
  addr: 建立映射区的首地址,由linux内核指定.使用时,直接传递NULL.
  length: 欲创建映射区的大小.
  prot: 映射区权限: PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE
  flags: 标志位参数(常用于设定更新物理区域,设置共享,创建匿名映射区)
    MAP_SHARED: 会将映射区所做的操作反映到物理设备(磁盘)上.
    MAP_PRIVATE: 映射区所做的修改不会反映到物理设备上.
  fd: 用来建立映射区的文件描述符.
  offset: 映射文件的偏移(4k的整数倍).

注意:
  1> 当MAP_SHARED时:
   1. 创建映射区的权限要小于等于打开文件权限(出于对映射区的保护).
   2. 映射区创建的过程中隐含着一次对文件的读操作.
  而MAP_PRIVATE无所谓,因为mmap中的权限是对内存的限制.

  2> offset(偏移量) 必须是4k的整数倍.

  3> mmap创建映射区出错概率非常高,一定要检查返回值,确保映射区建议成功再进行后续操作.
文件描述符先关闭,对mmap映射没有影响.

例:通过映射区多进程拷贝大文件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值