闲来没事给想要学习进程间使用共享内存通信的例子,共享内存的效率比消息队列、信号量都要高?为什么呢?
(1)共享内存是运行在用户空间的,由应用程序控制。
(2)消息队列和信号量都是把数据从一个进程用户空间复制到内核空间,然后再由内核控件复制到另外一个进程的用户空间。
#include <unistd.h> #include <stdio.h> #include <string.h> #include <sys/mman.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/wait.h> #define key 0x1234 #define size 512 #define PERM S_IRUSR|S_IWUSR int main(void) { int shmid=shmget(key,size,IPC_CREAT|PERM); char *shm=shmat(shmid,NULL,0); if(shmid==-1){ perror("shmget"); return -1; } if(fork()>0){ int parent_id=getpid(); fprintf(stdout,"----parent pid=%d------ ",parent_id); int status; while(1){ char *p_shm=shmat(shmid,NULL,0); if(strncmp(p_shm,"end",3)==0){ fprintf(stdout,"***recyle child =%d***** ",wait(&status)); break; } else { memset(p_shm,'