Linux下C编程:共享内存通信实例
2016-05-09 23:21
447 查看
共享内存是LUNIX 系统中最底层的通信机制,也是最快速的通信机制。共享内存通过两个或多个进程共享同一块内存区域来实现进程间的通信。通常是由一个进程创建一块共享 内存区域,然后多个进程可以对其进行访问,一个进程将要传出的数据存放到共享内存中,另一个或多个进程则直接从共享内存中读取数据。因此这种通信方式是最高效的进程间通信方式。但实际的问题在于,当两个或多个进程使用共享内存进行通信时,同步问题的解决显得尤为重要,否则就会造成因不同进程同时读写一块共享内存中的数据而发生混乱。在通常的情况下,通过使用信号量来实现进程的同步。 以上两个程序是一个进程间通信的例子。这两个程序分别在不同的进程中运行,使用了共享内存进行通信。b从键盘读入数据,存放在共享内存中。a则从共享内存中读取数据,显示到屏幕上。由于没有使两个进程同步,显示的内容将是杂乱无章的,对这一问题的处理将在进一步学习有关同步的操作之后完成。 实例b程序负责向共享内存中写入数据,a程序负责从内存中读出共享的数据,它们之间并没有添加同步操作。 b.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> 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);
}
相关文章推荐
- Linux前言
- 虚拟机 下引入中文
- linux基础(15)--locate、find命令的使用--RHEL6.5
- Iptables-save
- linux之vm tools安装
- 笔记本中的archlinux调节亮度
- linux下做图工具——graphviz安装配置
- Centos7配置国内yum源
- ioctl---字符设备的控制技术
- linux基础(14)--输入输出重定向、文件查找--RHEL6.5
- linux下命令源码
- 对于linux下system()函数的深度理解
- Centos上传下载小工具lrzsz
- linux线程资源回收
- 制作Linux启动盘并安装Linux系统到实体机
- CentOS6.8 upgrade gcc to gcc4.8
- CentOS7.0 PHP卸载以及安装
- Linux下查看文件和文件夹大小
- ArchLinux添加程序快捷方式
- linux基础之sed命令