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

如何创建共享内存

    来源: 互联网  发布时间:2017-01-08

    本文导语:  大家好!我最近在学习如何运用共享内存,但是自己写了一个创建共享内存的程序时报了错,我无法解决,望哪位侠客能够帮帮我,不胜感激!代码如下: #include  #include  #include  #include  typedef struct { char name[4];...

大家好!我最近在学习如何运用共享内存,但是自己写了一个创建共享内存的程序时报了错,我无法解决,望哪位侠客能够帮帮我,不胜感激!代码如下:
#include 
#include 
#include 
#include 
typedef struct {
char name[4];
int age;
   }people;
main(int argc , char * * argv)
{
int shm_id,i;
key_t key;
char temp;
people * p_map;
key = ftok("/home/sandifs/yzg/test",0);
if (key == -1)
printf ("ftok error!");
shm_id = shmget (key,4096,IPC_CREAT);
perror (shmget);
if (shm_id == -1)
{
printf ("shmget error!");
return;
}
p_map = (people *)shmat(shm_id,NULL,0);
perror (shmat);
temp='a';
for(i=0;iname,&temp,1);
(p_map+i)->age=i;
}
printf ("test5n");
  if (shmdt(p_map) == -1)
printf ("detach error!");

}

shmat时报错:Permission denied 

|
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x0003000c 65536      root       0          1024       0                       

默认什么都不写根本就没权限,只有创建者能用,退出之后再也没法用了。

加上所有权限以后,显示如下:


------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x0003000c 32768      root       666        1024       0                       


也就是0666这个8进制表示的权限。

测试代码如下:
#include 
#include 
#include 
#include 
#include 
#include 

int main()
{
        key_t key=ftok("/home/owenliang/",0);

        if(key==-1)
        {
                perror("ftok");
                return 1;
        }

        int shmID=shmget(key,1024,IPC_CREAT/*|S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH*/);

        if(shmID==-1)
        {
                perror("ftok");
                return 2;
        }

        printf("shmID:%dn",shmID);

        return 0;
}


    
 
 

您可能感兴趣的文章:

  • linux如何创建一个共享内存 可以mount 可以创建目录之类 跟硬盘分区一样
  • 如果查询一块共享内存是否被创建过
  • CGI程序无法访问本机某个程序创建的共享内存〔求教〕
  • 软件如何在NUMA中指定内存上创建空间
  • linux 下可否管理malloc创建的内存?
  • 在linux下能不能创建一个堆,然后给堆指定一块共享内存,然后各个程序用此堆来new对象来共享?
  • 在sun os 5.9下 创建一个posix 共享内存 出现的问题
  • C语言创建链表错误之通过指针参数申请动态内存实例分析
  • 请问:pthread的创建好像有内存泄露 还有多平台判断
  • mysql创建内存表的方法
  • fork 创建进程,共享内存,文件描述符问题
  • 创建共享失败。
  • 如何使用kdevelop创建动态共享库程序,请高手指点
  • 关于创建共享库(.so)的问题,高手帮忙
  • 关于创建共享库的问题(很容易)
  • 创建共享库文件(.so)版本冲突问题如何解决
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Bitsets 成员 Constructors:创建新bitsets
  • 菜鸟在c盘装了win2000,想在剩下的空间装Red Hat Enterprise Linux 3,在创建linux分区的时候,不知道都创建什么分区??我知道要创建一个
  • C++ Double Ended Queues(双向队列) 成员 Constructors:创建一个新双向队列
  • 一进程源源不断地创建文件,另一进程把这些创建的文件抓取并挪走
  • C++ I/O 成员 open():创建一个输入流
  • 创建用户组创建用户出错
  • Xcode介绍及创建工程和工程依赖操作步骤
  • 进程创建进程组后,然后创建该组中的进程,然后终止。这里的终止....?
  • HTML5 sprite 样式创建工具Stitches介绍
  • php循环创建目录示例分享(php创建多级目录)
  • java Servlet实现Session创建存取以及url重写代码示例
  • navicat 8 创建数据库与创建用户分配权限图文方法
  • sql server 2008:您对无法重新创建的表进行了更改或者启用了“阻止保存重新创建表的更改”
  • mkdir()是创建文件夹的函数,有没有循环创建多个目录级的函数呢?
  • 各位高手知道在JAVA中如何用一个名称创建一个对象实例,并调用其方法,注意:在编写代码时并不知要创建的对象的类名,也并不知方法名
  • FTP上创建的文件夹的创建日期始终和本机的对不上(无论如何改变日期和时间)(紧急!!!)
  • 急!linux下mysql的创建用户组和创建用户命令不能生效啊????
  • 怎么创建包,我创建包后,怎么找不到呢?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 100求解:如何在UNIX环境下创建一个新的端口号?另:能告之如何在WINDOWS2000环境下创建一个新的端口号就更好了!
  • linux普通用户创建文件或目录


  • 站内导航:


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

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

    浙ICP备11055608号-3