一步一步学Linux C:共享内存通信实例
来源:互联网 发布:陈震老婆的淘宝店 编辑:程序博客网 时间:2024/06/05 18:15
共享内存是LUNIX 系统中最底层的通信机制,也是最快速的通信机制。共享内存通过两个或多个进程共享同一块内存区域来实现进程间的通信。通常是由一个进程创建一块共享
内存区域,然后多个进程可以对其进行访问,一个进程将要传出的数据存放到共享内存中,另一个或多个进程则直接从共享内存中读取数据。因此这种通信方式是最高效的进程间通信方式。但实际的问题在于,当两个或多个进程使用共享内存进行通信时,同步问题的解决显得尤为重要,否则就会造成因不同进程同时读写一块共享内存中的数据而发生混乱。在通常的情况下,通过使用信号量来实现进程的同步。
以上两个程序是一个进程间通信的例子。这两个程序分别在不同的进程中运行,使用了共享内存进行通信。b从键盘读入数据,存放在共享内存中。a则从共享内存中读取数据,显示到屏幕上。由于没有使两个进程同步,显示的内容将是杂乱无章的,对这一问题的处理将在进一步学习有关同步的操作之后完成。
实例b程序负责向共享内存中写入数据,a程序负责从内存中读出共享的数据,它们之间并没有添加同步操作。
b.c
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #include <stdio.h>
- #define BUF_SIZE 1024
- #define MYKEY 25
- int main()
- {
- int shmid;
- char *shmptr;
- if((shmid = shmget(MYKEY,BUF_SIZE,IPC_CREAT)) ==-1)
- {
- printf("shmget error \n");
- exit(1);
- }
- if((shmptr =shmat(shmid,0,0))==(void *)-1)
- {
- printf("shmat error!\n");
- exit(1);
- }
- while(1)
- {
- printf("input:");
- scanf("%s",shmptr);
- }
- exit(0);
- }
a.c
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #define BUF_SIZE 1024
- #define MYKEY 25
- int main()
- {
- int shmid;
- char * shmptr;
- if((shmid = shmget(MYKEY,BUF_SIZE,IPC_CREAT)) ==-1)
- {
- printf("shmget error!\n");
- exit(1);
- }
- if((shmptr = shmat(shmid,0,0)) == (void *)-1)
- {
- printf("shmat error!\n");
- exit(1);
- }
- while(1)
- {
- printf("string :%s\n",shmptr);
- sleep(3);
- }
- exit(0);
- }
0 0
- 一步一步学Linux C:共享内存通信实例
- Linux下C编程:共享内存通信实例
- 那年,一步一步学linux c ---浅谈动态内存
- 那年,一步一步学linux c ---内存映像~~那些事~~
- linux共享内存通信
- Linux共享内存通信
- linux 共享内存通信
- linux通信-共享内存
- linux 进程间通信--systemV 共享内存 实例
- linux进程间通信-----System V共享内存总结实例
- Linux C编程--进程间通信(IPC)6--综合应用实例--信号量和共享内存的使用
- Linux C编程--进程间通信(IPC)6--综合应用实例--信号量和共享内存的使用
- linux进程间的通信(C): 共享内存
- linux进程间的通信(C): 共享内存
- linux进程间的通信(C): 共享内存
- linux c之使用共享内存实现进程间通信
- linux进程间的通信(C): 共享内存
- linux进程通信-共享内存
- “破网”利器一箩筐——移动互联网分析工具推荐
- struts中Action的线程安全性分析
- leetcode - Pascal's Triangle
- 新手练习之~unity3d射击类游戏~
- 蓝的成长记——追逐DBA(6): 做事与做人:小技术,大为人
- 一步一步学Linux C:共享内存通信实例
- 双向队列(STL做法)
- 关于代码优化中inline函数的使用
- JVM常量池及字符串
- hdu 4268 Alice and Bob矩形覆盖(贪心)
- 【Struts2学习笔记(8)】访问或添加request/session/application属性获取HttpServletRequest / HttpSession / ServletContex
- C++中关于const关键字的使用
- 单层感知器的MATLAB实现
- Oracle查看SQL执行计划的方式