作家
登录

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

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

  •  
  •         if(fd < 0){ 
  •  
  •             printf("shm_open failed\n"); 
  •  
  •             exit(1); 
  •  
  •         } 
  •  
  •         return 0; 
  •  
  •     } 
  •  
  •  
  • # ./shmopen# ls -lh /dev/shm/shm1 
  •  
  • -rw-r--r-- 1 root root 65M Mar  3 06:19 /dev/shm/shm1 
  • 仅管/dev/shm只有64M,但创建65M的POSIX SM也可以成功。

    可以看到:因为内核在mount tmpfs时,指定了MS_NOUSER,所以该tmpfs没有大年夜小限制,是以,SYS V共享内存可以或许应用的内存空间只受/proc/sys/kernel/shmmax限制;而用户经由过程挂载的/dev/shm,默认为物理内存的1/2。

    (4)向POSIX SM写数据

    /dev/shm的mount与通俗文件mount的流程类似,不再评论辩论。然则,值得留意的是,/dev/shm默认的大年夜小为当前物理内存的1/2:

    点击(此处)折叠或打开

    1.     /*gcc -o shmwrite shmwrite.c -lrt*/#include <unistd.h> 
    2.  
    3.     #include <fcntl.h> 
    4.  
    5.     #include <sys/stat.h> 
    6.  
    7.     #include <sys/types.h> 
    8.  
    9.     #include <sys/mman.h> 
    10.  
    11.     #include <stdio.h> 
    12.  
    13.     #include <stdlib.h> 
    14.  
    15.     #define MAP_SIZE 68157440 
    16.  
    17.     int main(int argc, char *argv[]) 
    18.  
    19.     { 
    20.  
    21.         int fd; 
    22.  
    23.         void* result; 
    24.  
    25.         fd = shm_open("/shm1", O_RDWR|O_CREAT, 0644); 
    26.  
    27.         if(fd < 0){ 
    28.  
    29.              printf("shm_open failed\n"); 
    30.  
    31.              exit(1); 
    32.  
    33.         } 
    34.  
    35.         if (ftruncate(fd, MAP_SIZE) < 0){ 
    36.  
    37.             printf("ftruncate failed\n"); 
    38.  
    39.             exit(1); 
    40.  
    41.         } 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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