linux进程间通信方式

linux进程间通信方式

一、管道

无名管道:只能建立具有亲缘关系的进程之间

1.用pipe创建的管道两端处于一个进程中,由于管道主要应用于不同进程间通信的,因此在实际应用中没有多大意义。实际上,通常先创建一个管道,然后通过fork函数创建一个子进程,该子进程继承父进程所创建的管道,这样才能通过pipe管道进行通信。

 

2.用popen建立基于文件流的管道。


有名管道:突破亲缘关系进程,可以使两个不相关的进程实现彼此通信。该管道可以通过路径名来指出,并且在文件系统中是可见的。
1.用mkfifo函数创建有名管道。类似于open函数操作,可以指定管道的路径和打开的模式。


二、信号
1.信号的分类:可靠性信号和不可靠性信号。
2.信号的生命周期分为三个重要阶段,三个阶段由四个重要事件来刻画的:信号的产生,信号在进程中的注册,信号在进程中的注销,执行信号处理函数signal。
3.用户进程对信号的响应可以有以下3种方式:忽略信号,捕捉信号,执行缺省操作。

 

三、共享内存
共享内存:一种最为搞笑的进程间通信方式。因为进程可以直接读写内存,不需要任何的数据拷贝。需要依靠某种同步机制(如互斥锁和信号量等)。
共享内存的实现分为两个步骤:第一步是创建共享内存,用shmget函数从内存中获取一段共享内存区域。第二步是映射共享内存,用shmat函数把这段创建的共享内存映射到具体的进程空间去。还有撤销映射的操作函数shmdt。


四、消息队列
消息队列:即一个消息的列表。用户可以在消息队列中添加消息,读取消息等。消息队列具有fifo特性,并且可以实现消息的随机查询。这些消息存在于内核中,由“队列ID”来标识。
消息队列的实现:包括创建或打开消息队列(msgget),添加消息(msgsnd),读取消息(msgrcv)和控制消息队列(msgctl)这四种操作。

 

五、socket通信

 

linux常用命令

ipcs   用于报告进程间通信机制状态的命令。它可以查看共享内存,消息队列等各种进程间通信机制的情况。(ipcs -m,ipcs -q)
dmesg  显示内核打印信息。

你可能感兴趣的:(linux应用层开发相关)