程序员开发实例大全宝库

网站首页 > 编程文章 正文

linux中进程通信-共享内存(linux进程共享变量)

zazugpt 2024-09-02 04:22:17 编程文章 21 ℃ 0 评论

共享内存是一种进程间通信的方式,其实就是两个不同的进程共享同一块逻辑内存,实现两个正在运行的进程间的数据交互。两个进程共享同一块内存即同一段物理内存。进程可以将该物理内存连接到自己的地址空间中,所以进程都可以访问共享的内存地址。当一个进程向共享内存中写数据,同时也将影响访问共享内存的另外一个进程。

l 共享内存没有提供同步机制,因此共享内存一般与信号量配合使用。

l 在linux系统中每个进程有属于自己的进程控制块、地址空间,每个进程都有一个页表,主要是负责虚拟地址与物理地址的映射。

l 当两个进程通过页表实现虚拟地址与物理地址的映射时,在物理地址有一块共享内存,这块共享内存两个进程都可以同时使用。当一个进程进行写操作时,另一个进程进程读操作实现进程间通信。同时使用信号量实现同步互斥。

l 创建共享内存

Int shmget(key_t key,size_t size,int shmflg)

参数:

Key:由ftok生成的key标识;

Size:申请的共享内存的大小;

Shmflg;如果要创建新的共享内存,需要使用IPC_CREAT, IPC_EXCL

返回:成功时返回一个新建或已经存在的共享内存标识符。

l 挂接共享内存

Void *shmat(int shmid,const void *shmaddr,int shmflg)

参数:

Shmid:共享存储段的标识符;

Shmaddr:当为0时,存储段连接到由内核选择的第一个地址上

Shmflg:如果为shm_rdonly ,则只读方式连接

返回值:成功返回共享存储段的指针

l 去关联共享内存

Int shmdt(const void *shmaddr)

l 销毁共享内存

Int shmctl(int shmid,int cmd,struct shmid_ds *buf)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表