当前位置: 技术问答>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
#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进制表示的权限。
测试代码如下:
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;
}