进程间的通信

发布时间:2020-07-30 15:04:59 作者:yayaru9240
来源:网络 阅读:329

进程间通信概念:(IPC)

    每个进程都有各自不同的进程地址空间,任何一个进程的全局变量在另一个进程中都看不到,因此进程之间要交换数据必须要通过内核,在内核中开辟一块缓冲区,进程把数据从用户空间拷贝到内核区,再从内核缓冲区取出数据。这就叫进程间的通信。

进程间的通信

管道技术:(pipe)

    是一种最基本进程间通信机制,它是基于字节流的。分为匿名管道和命名管道。

调用pipe函数时,会在内核区开辟一块缓冲区用于通信,它有一个读端和一个写端,通过参数传给用户程序两个文件描述符,0指管道的读端,1指管道的写端,因此管道在用户程序看来就像一个打开的文件,向这个文件读写数据,其实就是读写内核缓冲区。

匿名管道特点:单向通信;必须是有血缘关系的进程间通信;管道内部自有机制来保护数据能读写完全;是一种面向流式的服务

进程间的通信

父进程调pipe开辟管道得到两个文件描述符指向管道两端;用fork创子进程,子进程也有两个文件描述符指向同一管道;父进程关闭管道写端,子进程关闭管道读端。

进程间的通信

运行结果:

进程间的通信

使用管道时应注意四种特殊情况:

1.指向管道的写端没关闭,但是也不写数据,此时指向管道的读端还一直再读数据,当读完管道的数据后,再次读会阻塞,知道管道中有数据了才读取数据并返回。

进程间的通信

如图,当count等于5时,让它停止写入,此时读端会阻塞。

进程间的通信

2.指向管道的读端没关闭,但是也不读数据,此时指向管道的写端还一直再写数据,当管道被写满时,再次写会阻塞。知道管道中有空位置了才写。(代码类似1)

3.如果指向管道的写端都关闭了,而指向管道的读端还在读,当剩余数据被读完后,再次读会返回0,好比已经读到文件结尾了。

进程间的通信

4..如果指向管道的读端都关闭了,而指向管道的写端还在写,那么此时该进程会收到一个SIGPIPE,使进程异常终止。

命名管道:(FIFO)它可以用于任何两个进程间的通信,不管是否有血缘关系,它是存在于用盘上的文件,在文件系统中以文件名的方式存在,它是一个可见的文件。可以通过文件系统公共路径名来表示一个IPC通道。它按照先进先出原则,第一个被写入的数据总是第一个先被读出来。

写端往文件里里写入数据

进程间的通信

读端读取数据

进程间的通信

运行结果:

进程间的通信


推荐阅读:
  1. 通过队列完成进程间的通信
  2. 基于UDP协议的进程间通信

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

程序 通信 缓冲区

上一篇:解决python无法写入中文的方法

下一篇:python中查看矩阵维数的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》