1 / 6
文档名称:

Linux 进程间通信知识点总结.docx

格式:docx   大小:24KB   页数:6页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Linux 进程间通信知识点总结.docx

上传人:miaoshen1985 2018/9/12 文件大小:24 KB

下载得到文件列表

Linux 进程间通信知识点总结.docx

相关文档

文档介绍

文档介绍:Linux 进程间通信知识点总结
进程间通信(IPC)是指在不同进程之间传播或交换信息。
进程间通信的方式主要有以下6钟:
管道(Pipe)
信号(Singal)
信号量(Semaphore)
共享内存(shared memory)
消息队列(Message Queue)
套接字(Socket)
下面对6种方式进行详细介绍:
管道
1、管道分为有名管道和无名管道,通常指无名管道。
2、无名管道特点:
(1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
(2)它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
(3)对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
3、缺点:速度慢,容量有限,只有父子进程能通讯。
4、管道的创建及使用:
调用pipe()函数创建一个管道,再通过fork()函数创建一个子进程,该子进程继承父进程所创建的管道,为实现父子进程间的读写,只需把无关的读端或写端的文件描述符关闭即可。若要数据流从父进程流向子进程,则关闭父进程的读端(fd[0])与子进程的写端(fd[1]);反之,则可以使数据流从子进程流向父进程。
5、父子进程在运行时,先后顺序并不能保证。可以在进程中添加sleep()函数。
6、标流管道:管道的操作也支持基于文件流的模式,这种基于文件流的管道主要是用来创建一个连接到另一个进程的管道,这里的“另一个进程”也就是一个可以进行一定操作的可执行文件

7、因此标准流管道就将一系列的创建过程合并到一个函数popen()中完成。它所完成的工作有以下几步:
(1)创建一个管道
(2)fork()一个子进程
(3)在父进程中关闭不必要的文件描述符
(4)执行exec函数族调用
(5)执行函数中所指定的命令
8、popen()函数的使用减少了代码的编写量,但是灵活性不如pipe()函数所创建的管道,并且使用popen()创建的管道必须使用标准I/O函数进行操作,但不能使用read()、write()一类不带缓冲的I/O函数。open()创建的流管道必须使用函数pclose()来关闭该管道流。
9、有名管道特点:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。它是一个设备文件,提供一个路径名与FIFO关联。
10、有名管道缺点:任何进程间都能通讯,但速度慢。
11、使用有名管道需先调用open函数将其打开,设置读写端的权限,若只是以只读或只写方式打开,会阻塞到有读或写方式打开管道为止。若同时以读写方式打开,一定不阻塞。
12、有名管道的阻塞打开和非阻塞打开:
(1)读进程
若管道阻塞打开,且当前FIFO内没有数据,则读进程一直阻塞到有数据写入。
若管道非阻塞打开,不论FIFO内是否有数据,读进程都立刻执行读操作。即FIFO内没有数据,该函数就立刻返回0。
写进程
若管道阻塞打开,写操作一直阻塞到有数据可以被写入。
若管道是非阻塞打开且不能写入全部数据,读操作进行部分写入或者调用失败。
13、除了调用myfifo()函数之外,有名管道还可以通过“mknod 管道名 p”的方式创建。
信号
信号是软件层次上对中断机制