IPC:Inter-Process Communication,进程间通信
共享内存:共享内存被认为是最快的IPC通信方式。因为进程可以直接读写内存,不需要任何数据的复制。
为了在多个进程间交换信息,内核专门留出了一块内存空间,这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此进程就可以直接读写这一内存而不需要进行数据的复制,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。
创建共享内存:int shmget(key_t key, size_t size, int shmflg);
以下情况系统会创建一个新的共享内存:
1. 当key位IPC_PRIVATE
2. key不取IPC_PRIVATE,同时内核中没有与key相对应的共享内存段存在,shmflg设置了IPC_CREAT
如果shmflg同时设置了IPC_CREAT和IPC_EXCL,且内核中存在与key相关的共享内存段,shmget函数将调用失败,errno将设置为EEXIST。
设置共享内存:int shmctl(int shmid, int cmd, struct shmid_ds *buf);
映射共享内存:void *shmat(int shmid, const void *shmaddr, int shmflg);
解除共享内存映射:int shmdt(const void *shmaddr);
命令ipcs可以用来报告进程间通信机制状态
#ipcs -m
key shmid owner perms bytes nattch status
0x00000000 65536 root 600 393216 2 dest
——忠于梦想 勇于实践 linux_xpj@opencores.org
阅读(969) | 评论(0) | 转发(0) |