linux 高级IO 磁盘映射IO

存储映射IO

说明:在进程的栈中开辟一块缓冲区将之与磁盘文件相对应,对缓冲区的更改将自动写入磁盘文件,这样就可以不在使用read和write的情况下执行IO

<sys/mman.h>

 

mmap函数

void* mmap(void* addr, size_t len, int prot, int flag, int filedes, off_t  off )

将filedes指向的文件映射到存储区

返回值:映射后的存储区起始地址(需将addr指定为0)

addr: 指定存储区的起始地址.通常设置为0,表示由系统选择映射存储区.

Filedes:要映射的文件描述符

prot:对映射存储区的保护要求

       PROT_READ     映射区可读

       PROT_WRITE   映射区可写

       PROT_EXEC     映射区可执行

       PROT_NONE    映射区不可访问

flag:

 

       MAP_FIXED     返回值必须等于addr

       MAP_SHARED 对存储区的更改会对文件造成修改

       MAP_PRIVATE 存储区的更改以及之后的操作都是对映射文件副本的修改,不影响原文件

 

mprotect函数

修改存在的映射存储区的权限
int    mprotect( void* addr,  size_t len,   int prot  )

 

msync函数

将更改后存储区页写回文件

int msync( void *addr,  size_t  len,  int prot )

 

munmap函数

解除存储映射

int munmap( caddr_t addr,  size_t len )

 

 

 

IO多路转接

构造一张有关描述符的列表,然后调用select函数,当一个或多个IO准备好时select返回

 

int select( int maxfdp1,fd_set * readfds , fd_set*  writefds,  fd_set* exceptfds,  struct  timeval* tvptr  )

maxfdp1:最大描述符+1,即描述符个数

readfds,writefds,exceptfds:关心的可读,可写和处于异常条件的各个描述符.

 

Tvptr:愿意等待的事件

== NULL:永远等待

tvptr->tv-sec==0  && tvptr->tv_usec==0:完全不等待

tvptr->tv-sec!=0  || tvptr->tv_usec!=0:等待制定时间

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值