频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2006-08-06 进入讨论组

#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;
      
}

文字:http://www.qqread.com/linux/2006/08/d883194061.html 更多文章 更多内容请看共享上网专题三机互联与共享专题局域网共享专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章