进程间通信基础
进程间通信大致可以分为本地进程间通信和网络进程间通信。
本地进程间通信有:管道和FIFO(命令管道)、消息队列、信号量(semaphore)以及共享存储。
网络进程间通信:套接字(socket)和STREAMS
1.管道和FIFO(命名管道)
最适合在进程之间实现生产者/消费者的交互。有些进程向管道中写入数据,而另外一些进程则从管道中读出数据。
1).在Unix的命令shell中,可以使用“|”操作符来创建管道。
例如,下面的语句通知shell创建两个进程,并使用一个管道把这两个进程连接在一起:
$ls | more
第一个进程(执行ls程序)的标准输出被重定向到管道中;第二个进程(执行more程序)从这个管道中读取输入。
注意,执行下面这两条命令也可以得到相同的结果;
$ls > temp
$more < temp
第一个命令把ls的输出重定向到一个普通文件中;接下来,第二个命令强制more从这个普通文件中读取输入。当然,通常使用管道比使用临时文件更方便。\
2).进程通过执行mknod系统调用创建一个FIFO.FIFO一旦被创建,就可以使用普通的open()、read()、write()、close()系统调用FIFO。
2.消息队列
允许进程在预定义的消息队列中读和谐消息来交换消息。Linux内核提供两种不同的消息版本:System V IPC消息和POSIX消息。3.信号量
4.共享存储
允许进程通过共享内存块来交换信息。在必须共享大量数据的应用中,这可能是最高效的进程通信方式。5.套接字
允许不同计算机上的进程通过网络交换数据。套接字还可以用作相同主机上的进程之间的通信工具。
参考文档:
UNIX坏境高级编程