#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
/*共享内存,IPC_PRIVATE:系统分配本地IPC的值,1024:为内存大小,0666为内存权限*/
int main (void)
{
int shmid = shmget (IPC_PRIVATE,1024,0666);
if(shmid<0)
printf("error \n");
else
{
printf("success \n");
}
return 0;
}
利用ipcs -m 可以查看到进程间通讯的shm资源;ipcs查看进程间通讯的信息,m指定为共享内存查询。
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65536 cb 666 1024 0
在进程中开辟一段和共享内存(由操作系统分配)大小一样的空间,并建立联系
void * shmat(int shmid,const void *shmaddr, int shmflg)
shmid :共享内存编号,shmaddr:为进程分配内存的地址,一般设为0,操作系统自动分配
释放空间,释放进程自己的空间,而不是共享空间。
int shmdt();//参数为shmat返回的本地内存的地址
int main (int arg ,char *args[])
{
char *shmbuf;
int shmid =0;
// shmget (IPC_PRIVATE,1024,0666);
if(arg>2)
{
shmid = atoi (args[1]);//命令传参数
shmbuf=shmat(shmid,0,0);
if(atoi(args[2])==1)
{
scanf("%s",shmbuf);
}
if(atoi(args[2])==2)
{
printf("%s\n",shmbuf);
}
shmdt(shmbuf);
}
return 0;
}