linux/unix下多进程间的通信

橙三吉。 提交于 2019-12-06 03:47:04

    进程:进程是计算机运行的基本单位,利用多进程可以实现系统的多任务;但是,在多进程的任务中,进程之间的通信是比较麻烦的,因为,进程之间使用的是不同的进程空间,所以,编写多进程的系统,首先要决解进程之间的通信。

    linux/unix下的进程间的通信主要分为两大类:

    1、基于文件的IPC;

    2、基于内存的IPC;;

        基于文件的IPC又可以分为以下几类:基于普通文件的IPC、基于管道文件的IPC、基于socket文件的IPC。基于内存的IPC包括:基于共享内存的IPC,基于共享队列的IPC,基于信号量的IPC。

普通文件的IPC:使用普通文件的IPC是决解进程间通信的最基本方式,进程访问和操作普通文件;但是,基于普通文件IPC的一个主要技术问题是,一个进程改变了该文件,但是其他无法感知到文件的变化,为决解这个问题,可以使用一个特殊的文件:管道文件。

基于管道文件的IPC:管道是进程间通信的主要手段之一。管道文件实际上是一个只存在于内存中的文件,对管道的操作实际是对两个文件的操作,分别表示对管道文件的读和写,根据管道的创建方式,管道文件可以分为普通管道和匿名管道;但是,匿名管道只能使用在父子进程之间。

基于socket的IPC:基于socket的IPC主要使用在网络编程之中,是一种比较重要的文件通信方式。基于文件的IPC主要分为两种模型:对等模型和C/S模型,对等模型主要用于udp编程,而C/S模型主要用于Tcp编程。

基于内存的IPC:在介绍基于内存的IPC之前,首先要先介绍一下一组内核内存的工具(ipcs),ipcsipcs命令往标准输出写入一些关于活动进程间通信设施的信息,ipcs可以指定查看的具体信息,如ipcs -m 查看共享内存, -q:查看共享队列,ipcs -s查看共享信号量,以上3中都不指定时则是查看共享内存、共享队列和共享信号量;

基于共享内存的IPC:基于共享内存的编程模型是:首先需要创建(得到)一个共享内存,得到一个ID;然后把该ID对应的共享内存映射为虚拟地址(挂载);然后就可以使用虚拟地址访问内核的共享内存(使用与内存相关的函数和运算符号);最后就是卸载虚拟地址和删除共享内存。

基于共享队列的IPC:基于共享队列的编程模型是:首先需要创建(得到)共享队列;然后使用共享队列;最后记得删除该共享队列。

基于信号量的IPC:信号量是共享内存整数数组,根据需要定义指定数组的长度,信号量就是根据数组中的值,决定阻塞还是解除阻塞;基于信号量的编程模型是:创建(得到)信号量;然后初始化信号量中指定下标的值;然后根据信号量阻塞或者是解除阻塞;最后删除信号量。

对linux/unix的进程间通信的基本方式介绍到此;详细的内容将分别进行描述。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!