当前位置:  技术问答>linux和unix

如何释放异常终止程序申请的共享内存空间

    来源: 互联网  发布时间:2017-02-18

    本文导语:  求助一下: 我编写的部分代码如下:     char* name = "/dev/shm/myshm2";     key = ftok(name,0);     if(key==-1)         perror("ftok error");     shm_id=shmget(key,4096,IPC_CREAT | IPC_EXCL);     if(shm_id==-1)     {       ...

求助一下:
我编写的部分代码如下:

    char* name = "/dev/shm/myshm2";
    key = ftok(name,0);
    if(key==-1)
        perror("ftok error");

    shm_id=shmget(key,4096,IPC_CREAT | IPC_EXCL);
    if(shm_id==-1)
    {   
        perror("shmget error");
        return 1;
    }else{
        printf("shmid: %dn", shm_id);
    }   
        
    p_map=(people*)shmat(shm_id,0,0);
    if( p_map == (void*)-1)
    {   
        perror("shmat failedn");
        return 2;
    }   
    temp='a';
    printf("p_map address: %lxn", p_map);

在p_map=(people*)shmat(shm_id,0,0);的时候出现Permission Denied,导致程序退出
在下次再次执行时, shm_id=shmget(key,4096,IPC_CREAT | IPC_EXCL);这里报File Exist错误。

请问应该如何解决这个问题,谢谢~

|
因为共享内存已经被0权限创建了,之后的创建都将失败,不管你带不带EXCL,不会影响这个问题。

先用root敲命令ipcs -m看看那个共享内存的shmid,之后ipcrm删掉它。

|
 shm_id=shmget(key,4096,IPC_CREAT | IPC_EXCL); 

改成:
 shm_id=shmget(key,4096,IPC_CREAT | IPC_EXCL |0777);

|
把 IPC_EXCL 去掉

|
shm_id=shmget(key,4096,IPC_CREAT |0777);

    
 
 

您可能感兴趣的文章:

  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • 应用层malloc内存后,再free的话,内存不释放,而是在exit时释放,这个谁知道是怎么回事?
  • 我想动态申请一块内存,然后在释放这块内存,应该怎么做,在线等!
  • 在Linux上用C语言编写的函数里面申请了一块内存,并且返回这块内存,最终它需要释放吗?
  • Solaris上内存释放问题
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • 如何释放一个内存空间?
  • 关于释放内存
  • sqlite3的内存释放问题。
  • 【求教】为什么看不到内存释放的效果呢?
  • 关于子进程中释放内存的问题!!?高手请进
  • 请教高手如何释放内存
  • 如何在程序中释放特定文件缓冲区占用的内存:急!!!
  • 如果非配完内存不进行释放会产生什么情况?
  • 杀死一个进程是不是它所有的分配内存都释放了?
  • QT子窗口内存释放问题
  • 二叉树全局结构变量分配内存的释放问题
  • 可以用free来释放共享内存吗?
  • DOS下的释放内存命令是什么啊?
  • 如何释放内存?
  • STL map在使用过程中用了clear为什么在Top as中还是看不到内存释放呢?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • memset分配的空间用完以后需要进行释放吗? 如果需要释放,怎么释放呢? ---阿菜
  • 关于无名管道释放后,inode节点释放的问题
  • 请问:我发现端口一旦被绑定后就无法释放出来,除非服务器端退出,有没有主动释放端口的办法啊?
  • 用ftok获取的内核对象不需要释放吗?
  • 监听端口异常退出后如何马上释放端口
  • ctrl+c会自动释放资源?
  • 释放压缩TAR包,急,在线等
  • GTK+中类似gtk_hbox_new这样的给构件分配内存的函数 为什么不用手动释放?
  • 怎样释放服务端口??? 急:在线等待
  • 线程的资源释放
  • 连接池不能释放,
  • 用while循环等待事件发生时是否可以释放系统资源
  • LINUX源码释放磁盘页面的问题
  • 请教高手:FreeBSD下什么命令能释放系统的端口
  • 使用SYSTEM V队列,有关消息资源释放的问题
  • 子进程结束了 用new 申请的空间 是否会释放呀 ??
  • linux下如何释放ip和重新自动获得ip
  • 把ISO中的文件释放出来刻成光盘,能不能引导系统并从这个光盘上安装?
  • 【讨论】动态库资源释放问题
  • 如何杀掉一个端口下的所有进程以便释放掉这个端口


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3