函数:

(1)int shmget(key_t key, int size, int shmflg),开辟或使用一块共享内存。

(2)void *shmat(int shmid, const void *shmaddr, int shmflg), 将参数shmid所指向的共享内存与当前进程连接。当使用某共享内存时,需要先使用shmat,达成连接。

(3)int shmdt(const void *shmaddr),将先前用shmat连接的共享内存与当前进程解除连接。参数shmaddr为shmat返回的共享内存的地址。在完成对共享内存的使用后,需要使用shmdt解除连接。

(4)int shmctl(int shmid, int cmd, struct shmid_ds *buf),控制内存的操作。当cmd为IPC_RMID时,删除shmid所指的共享内存。

实例:

 file: shmshare.c
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/ipc.h>
#include<sys/shm.h> int main(int argc, char* argv[])
{
int shmid = shmget(IPC_PRIVATE, , IPC_CREAT | );
if (shmid < )
{
perror("shmget");
exit(EXIT_FAILURE);
}
printf("create shared memory OK, size = 1024, shmid = %d\n", shmid); char* buff = (char*)shmat(shmid, NULL, );
if ((int)buff == -)
{
perror("shmat");
exit(EXIT_FAILURE);
}
memset(buff, , );
char temp[] = "";
scanf("%s", temp);
strncpy(buff, temp, ); shmctl(shmid, IPC_RMID, NULL);
return ;
}
 file: shmshare2.c
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<assert.h> int main(int argc, char* argv[])
{
assert(argc == );
int shmid = atoi(argv[]);
char* buff = (char*)shmat(shmid, NULL, );
if ((int)buff == -)
{
perror("shmat");
exit(EXIT_FAILURE);
}
while()
{
if (buff[])
{
printf("buff:%s\n", buff);
break;
}
}
shmdt(buff);
return ;
}
 $gcc -Wall -o shmshare shmshare.c
$./shmshare
create shared memory OK, size = , shmid =
<wait for input>
 $gcc -Wall -o shmshare2 shmshare2.c
$./shmshare2
print <wait for input>

总结:共享内存是各种通信方式中效率最高的,但是也有一些问题,如多进程,多线程访问共享内存时同步问题。各种通信方式大同小易,原理都差不多,都是由系统提供支持的通信方式。从消息队列信号量可以看出,这系列POSIX IPC的方式是类似,查看man手册可以了解到更多的用法。

进程间通信IPC-内存共享的更多相关文章

  1. 进程间通信IPC之--共享内存

    每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲 ...

  2. 进程间通信——IPC之共享内存

        共享内存是三个IPC机制中的一个.它允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式.   大多数的共享内存的实现,都把由不同进程之间共享 ...

  3. 【Linux 应用编程】进程管理 - 进程间通信IPC之共享内存 mmap

    IPC(InterProcess Communication,进程间通信)是进程中的重要概念.Linux 进程之间常用的通信方式有: 文件:简单,低效,需要代码控制同步 管道:使用简单,默认阻塞 匿名 ...

  4. 进程间通信IPC:消息队列,信号量,共享内存

    2015.3.4星期三 阴天 进程间通信:IPC 文件对象:记录文件描述符,文件开关等 IPC标示符:系统全局的流水号两个进程要通信,打开的是唯一的对象进行通讯,通过key操作 XSI IPC:消息队 ...

  5. System V IPC 之共享内存

    IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 ...

  6. Linux进程间通信(System V) --- 共享内存

    共享内存 IPC 原理 共享内存进程间通信机制主要用于实现进程间大量的数据传输,下图所示为进程间使用共享内存实现大量数据传输的示意图: 共享内存是在内存中单独开辟的一段内存空间,这段内存空间有自己特有 ...

  7. System IPC 与Posix IPC(共享内存)

    系统v(共享内存) 1.对于系统V共享内存,主要有以下几个API:shmget().shmat().shmdt()及shmctl(). 2.shmget()用来获得共享内存区域的ID,如果不存在指定的 ...

  8. Linux IPC之共享内存C 事例

    Linux IPC之共享内存 标签: linuxrandomnull工作 2011-08-25 11:52 4123人阅读 评论(0) 收藏 举报  分类: Linux(3)  读书札记(3)  版权 ...

  9. 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等

    一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...

  10. Android进程间通信IPC

    一.IPC的说明 IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. IPC不是Android独有的,任何一个操作 ...

随机推荐

  1. js实现(可实现局部打印)

    1.js实现(可实现局部打印) <input id="btnPrint" type="button" value="打印" oncli ...

  2. java 幂等性(转)

    (转自)http://www.cnblogs.com/weidagang2046/archive/2011/06/04/idempotence.html 理解HTTP幂等性 基于HTTP协议的Web ...

  3. Final——无线网络密码破解——WPA/WPA2

    Final--无线网络密码破解--WPA/WPA2 20154305 齐帅 ↓ ↓ ↓ * # % & 郑 重 声 明 & % # * ↓ ↓ ↓ 本实验教程用于探索无线路由安全漏洞, ...

  4. QT汇总

    1.QT介绍及其在Linux下的安装 2.windows下安装QT并与visual studio 2017搭建开发环境 参考资料: QT官网资料 QT实战一二三 Qt资料大全 <Qt 实战一二三 ...

  5. JS中获取CSS样式的方法

    1.对于内联样式,可以直接使用ele.style.属性名(当然也可以用键值对的方式)获得.注意在CSS中单词之间用-连接,在JS中要用驼峰命名法 如 <div id="dv" ...

  6. SpringMVC框架出现 405 request method post not supported 的解决方法

    在SpringMVC框架中当使用post请求服务,然后请求成功转到一个静态文件,如html,htm等网页时.页面出现405 request method post not supported错误,只要 ...

  7. all about

    1.三次握手和四次挥手?2.什么是OSI七层结构?3.http vs https?4.what is Ping?基于什么协议?使用方法?5.DNS?6.cookie vs session?7.LDAP ...

  8. zookeeper集群配置详细教程

      第一步:环境准备 环境 版本 说明 JDK 1.8 zookeeper运行所需 centos 7 操作系统 需要配置好JDK的环境变量 zookeeper-3.4.9.tar.gz 3.4.9 z ...

  9. Flutter介绍 - Flutter,H5,React Native之间的对比

    Flutter介绍 Flutter是Google推出的开源移动应用开发框架.开发者可以通过开发一套代码同时运行在iOS和Android平台. 它使用Dart语言进行开发,并且最终编译成各个平台的Nat ...

  10. 查看windows到期时间

        查看windows到期时间    Slmgr.vbs  -xpr