Linux进程间通信编程

来源:互联网 发布:司马懿为何不称帝 知乎 编辑:程序博客网 时间:2024/05/17 03:13

3.消息队列

消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式.进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息.

 

优点:比信号传送的信息量多 能传送有格式的字节流

 

目前主要有两种类型的消息队列:

1.系统V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除 (系统V消息队列目前被大量使用)

2.消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,必须提供该消息队列的键值

 

   消息队列的创建

IPC_CREAT

      创建新的消息队列

IPC_EXCL

      IPC_CREAT一同使用,表示如果要创建的消息队列已经存在,则返回错误。

IPC_NOWAIT

       读写消息队列要求无法得到满足时,不阻塞

 

4.共享内存

        .共享内存被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.

 

共享内存实现分为两个步骤:

         一、创建共享内存,使用shmget函数

         二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数

共享内存的创建

int shmget ( key_t key, int size, int shmflg )

   key标识共享内存的键值: 0/IPC_PRIVATE。 当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中又设置IPC_PRIVATE这个标志,则同样会创建一块新的共享内存。

     返回值:如果成功,返回共享内存标识符;如果失败,返回-1

 

char * shmat ( int shmid, char *shmaddr, int flag)

参数:

shmidshmget函数返回的共享存储标识符

flag:决定以什么方式来确定映射的地址(通常为0

返回值:

   如果成功,则返回共享内存映射到进程中的地址;如果失败,则返回- 1当一个进程不再需要共享内存时,需要把它从进程地址空间中脱离。

     

5.信号量

除了用于访问控制外,还可用于进程同步

 

0 0
原创粉丝点击