西安邮电实验4.5-linux内存映射实现

西安邮电实验4.5-linux内存映射实现

1.首先简单熟悉一下mmap()系统调用,如下实现cat 功能:

#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
    char * addr;
    int fd;
    struct stat sb;
    
    if(argc!=2 || strcmp(argv[1],"--help")==0)
        printf("%s file\n",argv[0]);
    fd = open(argv[1],O_RDONLY);
    if(fd==-1)
        printf("open");
    if(fstat(fd,&sb)==-1)
        printf("fstat");
    addr=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);
    if(addr==MAP_FAILED)
        printf("mmap");
    if(write(STDOUT_FILENO,addr,sb.st_size)!=sb.st_size)
        printf("partial/failed write");
    exit(EXIT_SUCCESS);
}
  1. 运行过程。
    代码在gitee里都有:
    1.sudo make
    2.sudo insmod map_driver.ko
    3.sudo mknod /dev/mapnopage c 240 0 //创建虚拟节点设备

3.运行示意图(重点在于不同进程共享VMM):
从左到右从上到下运行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值