linux进程通信之共享内存




利用共享内存,进程a给进程b发送一个字符串,进程b收到后显示
int main()
{
key_t key = 0;
int shmid = 0;
int ret = 0;
key = ftok(\"/home/hua/\",1);
if(key == 0)
{
perror(\"ftok\");
exit(-1);
}
shmid = shmget(key,1024,IPC_CREAT|0600);
if(shmid == -1)
{
perror(\"shmget\");
exit(-1);
}
char *str = NULL;
str = shmat(shmid,NULL,0);
if(str == (void *)-1)
{
perror(\"shmat\");
exit(-1);
}
strcpy(str,\"nihao\");
ret = shmdt(str);
if(ret == -1)
{
perror(\"shmdt\");
exit(-1);
}
sleep(10)//延时10s等待进程b从共享内存中获取数据。
ret = shmctl(shmid,IPC_RMID,NULL);
if(ret == -1)
{
perror(\"shmctl\");
exit(-1);
}
return 0;
}
进程b从共享内存中获取数据,打印显示。
int main()
{
key_t key = 0;
int shmid = 0;
int ret = 0;
key = ftok(\"/home/hua/\",1);
if(key == 0)
{
perror(\"ftok\");
exit(-1);
}
shmid = shmget(key,1024,IPC_CREAT|0600);
if(shmid == -1)
{
perror(\"shmget\");
exit(-1);
}
char *str = NULL;
str = shmat(shmid,NULL,0);
if(str == (void *)-1)
{
perror(\"shmat\");
exit(-1);
}
char buf[100] = {0};
strcpy(buf,str);
printf(\"buf is %s\
\",buf);
ret = shmdt(str);
if(ret == -1)
{
perror(\"shmdt\");
exit(-1);
}
return 0;
}
进程b从共享内存中获取数据,显示