[Linux C编程]进程间的通信(二)

进程间的通信

共享内存

是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.

 

共享内存实现分为两个步骤:

 1、创建共享、打开共享内存,使用shmget函数

 2、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数

 3. 分离共享内存

 4. 控制、删除共享内存

创建shmget:

函数的作用:在内核中创建共享内存

函数的原型:int shmget(key_t key,int size,int shmflag);

函数的参数:key:键值,IPC_PRIVATE:私有的键值

            size:创建的内存大小

            shmflag:类似open权限

返 回 值:成功共享的内存标识符,出错 -1

头 文 件:#include <sys/ipc.h>

          #include <sys/shm.h>

 

映射shmat:

函数的作用:映射共享内存,映射到各自的内存空间;

函数的原型:void * shmat(int shmat,const void * shmaddr,int flag);

函数的参数:shmid:内存标识符

            shmaddr:映射共享内存到本地进程的指定地址,如果为NULL则由内核自动

                     分配。

            shmflag:SHM_RDONLY:共享内存只读;

                        0:共享内存可读写

分离shmdt:

函数的作用:撤销共享内存的映射

函数的原型:int shmdt(const void * shmaddr);

函数的参数:shmaddr:被映射的共享内存地址

返 回 值:成功:0   出错:-1

 

使用共享内存实现通信:

shm1.c:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "shm_com.h"
 
int main(void)
{
    int running=1;
void *shared_memory=(void *)0;
struct shared_use_st *shared_stuff;
int shmid;
 
 
/*创建共享内存*/
shmid=shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);
if(shmid==-1)
{
    fprintf(stderr,"shmget failed\n");
exit(EXIT_FAILURE);
}
 
/*映射共享内存*/
shared_memory=shmat(shmid,(void *)0,0);
if(shared_memo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值