Linux下C编程:共享内存通信实例
共享内存是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); }
查察全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm