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

IPC的权限问题

    来源: 互联网  发布时间:2016-04-18

    本文导语:  大家好,请教一个IPC权限问题,我创建了一个共享内存后,在shmat的时候出错,具体原因就是我不具备权限,系统输出错误为:Permission denied。 其中的要点在于; 1, 我创建共享内存的时候, 设置的权限为666,我创...

大家好,请教一个IPC权限问题,我创建了一个共享内存后,在shmat的时候出错,具体原因就是我不具备权限,系统输出错误为:Permission denied。

其中的要点在于;
1, 我创建共享内存的时候, 设置的权限为666,我创建内存成功,能够输出正常id,但是我用ipcs确看不到共享内存信息,在shmat的时候提示我没有权限
2, 我不是root用户,不具备管理员权限,当我切换到root用户的时候,能够看到我先前创建的共享内存(我用普通用户看不到,很奇怪),但是权限已经不是666, 而是222,也就是说我只能读

问题:
1,因为共享内存是随内核持续的,请问IPC的权限是否跟创建的用户权限有关? 哪怕你设置为666,最终IPC的权限也要根据你用户的权限来确定
2, 并不是我每次都无法创建权限为666的共享内存,也有一两次可以成功运行,但多运行两次后就失败
3,与共享内存的key没有多大关系,我换了很多key,一样无法成功,或者成功一两次

以下为代码片段,请指教
    if ((shm_id = shmget(shm_key, sizeof(int), IPC_CREAT | 666)) == -1)
    {
        perror("Can't get shm");
        return -1;
    }
    else    
    {
        printf("Shm's id is %dn", shm_id);
    }

    if (((int)shm_addr = shmat(shm_id, NULL, 0)) == -1)
    {
        perror("Shm attach error");
        shmctl(shm_id, IPC_RMID, NULL);
        return -1;
    }

|
666?
0666!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教:sun中程序执行semid = semget( IPC_PRIVATE, 1, 0600 | IPC_CREAT ),semid < 0,是什么原因?
  • 关于l inux ipc 冲突
  • 如何使Linux内核支持System V IPC?
  • UNIX系统下的IPC机制
  • shmdt(addr) 和 shmctl(shmid,IPC_RAID,0)有什么区别?
  • LINUX中实现单实例功能使用哪种IPC好啊?
  • ACE与网络IPC的关系是什么?
  • 使用ipcrm清理ipc
  • 到底还要不要学习System V IPC?
  • 一道ipc的题目
  • ipc里面常用的"管道"和"消息队列"本质上有什么不同?
  • cygwin下ipc共享内存
  • 宏内核系统IPC使用的传递机制是什么
  • android IPC之binder通信机制
  • IPC_CREAT | 0660 的意义是什么?
  • FreeBSD 不支持 POSIX IPC?
  • 在线等,关于IPC,高分求高人指点
  • IPC 通信中的msgsnd,msgrcv 中的msgsz到底取什么值呢?
  • linux进程间通讯方式(IPC)优缺点总结
  • 请问在单进程,多线程程序里,线程间使用IPC的信号量来同步,能行吗?


  • 站内导航:


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

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

    浙ICP备11055608号-3