作家
登录

浅析Linux的共享内存与tmpfs文件系统

作者: 来源: 2017-08-14 15:02:46 阅读 我要评论

#include <unistd.h> 
  •  
  • #define MAP_SIZE 68157440 
  •  
  • int main(int argc, char** argv){ 
  •  
  • int shm_id,i; 
  •  
  • key_t key
  •  
  • char temp
  •  
  • char *p_map; 
  •  
  • charname = "/dev/shm/shm3"
  •  
  • key = ftok(name,0); 
  •  
  • if(key==-1) 
  •  
  • perror("ftok error"); 
  •  
  • shm_id=shmget(key,MAP_SIZE,IPC_CREAT); 
  •  
  • if(shm_id==-1) 
  •  
  •  
  • perror("shmget error"); 
  •  
  • return
  •  
  •  
  • p_map=(char*)shmat(shm_id,NULL,0); 
  •  
  • memset(p_map, 0, MAP_SIZE); 
  •  
  • if(shmdt(p_map)==-1) 
  •  
  • perror(" detach error "); 
  •  
  •  
  • #./shmv 
  • 却可以正常履行。

    (7)结论

    固然System V与POSIX共享内存都是经由过程tmpfs实现,然则受的限制却不雷同。也就是说/proc/sys/kernel/shmmax只会影响SYS V共享内存,/dev/shm只会影响Posix共享内存。实际上,System V与Posix共享内存本来就是应用的两个不合的tmpfs实例(instance)。

    内核分析

    内核在初始化时,会主动mount一个tmpfs文件体系,挂载为shm_mnt:

    点击(此处)折叠或打开

    1. //mm/shmem.cstatic struct file_system_type  
    2.  
    3. shmem_fs_type = { 
    4.  
    5.     .owner = THIS_MODULE, 
    6.  
    7.    .name = "tmpfs"
    8.  
    9.     .get_sb = shmem_get_sb, 
    10.  
    11.     .kill_sb = kill_litter_super, 
    12.  
    13. }; 
    14.  
    15.  
    16. int __init shmem_init(void) { 
    17.  
    18.     ... 
    19.  
    20.     error = register_filesystem(&shmem_fs_type); 
    21.  
    22.     if (error)  
    23.  
    24.     { 

    25.   推荐阅读

        Windows 7系统U盘插入后假死怎么处理?

      Win7体系U盘插入后假逝世怎么处理?有效户表示,在Win7体系下,U盘插入后体系会出现假逝世的问题,一般十几秒钟就恢复正常了,固然对操作体系毫无影响,我们却不想存在任何假设的病毒存在,>>>详细阅读


      本文标题:浅析Linux的共享内存与tmpfs文件系统

      地址:http://www.17bianji.com/lsqh/36688.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)