Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390255
  • 博文数量: 80
  • 博客积分: 1982
  • 博客等级: 上尉
  • 技术积分: 1737
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-26 22:41
文章存档

2013年(9)

2012年(71)

分类: LINUX

2012-10-08 10:14:06

    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

阅读(959) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~