Linux网络编程--文件空间映射mmap函数

这里写图片描述

这里写图片描述
这里写图片描述

/*使用mmap对文件进行操作*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>/*mmap*/
#include <string.h>/*memset warning*/
#include <stdio.h>

#define FILELENGTH 80
int main(void)
{
  int fd = -1;
  /*将要写入文件的字符串*/
  char buf[]="quick brown fox jumps over the lazy dog";
  char *ptr = NULL;

  /*打开文件mmap.txt,并将文件长度缩小为0,
  如果文件不存在则创建它,权限为可读写执行*/
  fd = open("mmap.txt", O_RDWR/*可读写*/|O_CREAT/*不存在,创建*/|O_TRUNC/*缩小为0*/, S_IRWXU);  
  if( -1 == fd){
    /*打开文件失败,退出*/
    return -1;
  }  
  /*下面的代码将文件的长度扩大为80*/
  /*向后偏移文件的偏移量到79*/
  lseek(fd, FILELENGTH-1, SEEK_SET);
  /*随意写入一个字符,此时文件的长度为80*/
  write(fd, 'a', 1);

  /*将文件mmap.txt中的数据段从开头到FILELENGTH字节的数据映射到内存中,对文件的操作立刻显示在文件上,可读写*/
  ptr = (char*)mmap(NULL, FILELENGTH, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);
  if( (char*)-1 == ptr){
    /*如果映射失败,则退出*/
    printf("mmap failure\n");  
    close(fd);
    return -1;
  }

  /*将buf中的字符串拷贝到映射区域中,起始地址为偏移16*/
  memcpy(ptr+16, buf, strlen(buf));
  /*取消文件映射关系*/
  munmap(ptr, FILELENGTH);
  /*关闭文件*/
  close(fd);

    return 0;
}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值