首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
中国IT实验室Linux频道
中国IT教育
首页 新手入门 Linux编程 系统管理 网络管理 Linux认证 Unix/BSD Linux数据库 Linux集群 Linux手册 Linux下载 论坛 专题 RSS
您现在的位置: 中国IT实验室 >> Linux >> 系统管理 >> 内核技术 >> 文章正文

用户态和内核共享内存:最简单的例子

文章来源Chinaitlab收集整理 作者佚名 更新时间2006-4-30 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

#include
#include
#include
#include 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wheelz");
MODULE_DESCRIPTION("mmap demo");

static unsigned long p = 0;
static int __init init(void)
  {
    //分配共享内存(一个页面)
    p = __get_free_pages(GFP_KERNEL, 0);
    
    SetPageReserved(virt_to_page(p)); 
   
    printk("<1> p = 0x%08x\n", p);
   
    
    //在共享内存中写上一个字符串
   
    strcpy(p, "Hello world!\n");
    
    return 0;
  }

static void __exit fini(void)

{

   ClearPageReserved(virt_to_page(p));
  
   free_pages(p, 0);
  
}
   module_init(init);
  
   module_exit(fini);
  
   用户态程序---------------------------------
#include 

#include

#include

#include 

#include  

#define PAGE_SIZE (4*1024)

#define PAGE_OFFSET  0xc0000000

#define KERNEL_VIRT_ADDR 0xc5e3c000

int main()
{
  char *buf;
 
  int fd;
  
  unsigned long phy_addr;
   
  fd=open("/dev/mem",O_RDWR); 
 
  if(fd == -1) 
 
      perror("open");
     
  phy_addr=KERNEL_VIRT_ADDR - PAGE_OFFSET; 
  
  buf=mmap(0, PAGE_SIZE,   PROT_READ|PROT_WRITE, MAP_SHARED,   fd, phy_addr); 
 
  if(buf == MAP_FAILED) 
 
       perror("mmap");
      
       puts(buf);//打印共享内存的内容
      
       munmap(buf,PAGE_SIZE);  
      
       close(fd);
       
       return 0;
      
}

【责编:Kittoy】
中国IT教育
相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·Linux 安全管理
 ·Linux 下DNS服务器架设攻略
 ·Linux 下的路由的配置与应用
 ·专题:Apache实用手册
 ·全面剖析Linux文件系统
 ·Linux常用命令全集
 ·GRUB 玩转任意操作系统多重启动引导
 ·想传就传 多平台随心所欲架设FTP
 ·网络圈地 建立企业web服务器专题
 ·Linux安装指南专题
 今日更新
 认证培训
 频道精选
 Windows频道导航