进程间的通信-创新互联
进程间通信概念:(IPC)
目前成都创新互联已为成百上千家的企业提供了网站建设、域名、虚拟主机、网站托管维护、企业网站设计、左权网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。每个进程都有各自不同的进程地址空间,任何一个进程的全局变量在另一个进程中都看不到,因此进程之间要交换数据必须要通过内核,在内核中开辟一块缓冲区,进程把数据从用户空间拷贝到内核区,再从内核缓冲区取出数据。这就叫进程间的通信。
管道技术:(pipe)
是一种最基本进程间通信机制,它是基于字节流的。分为匿名管道和命名管道。
调用pipe函数时,会在内核区开辟一块缓冲区用于通信,它有一个读端和一个写端,通过参数传给用户程序两个文件描述符,0指管道的读端,1指管道的写端,因此管道在用户程序看来就像一个打开的文件,向这个文件读写数据,其实就是读写内核缓冲区。
匿名管道特点:单向通信;必须是有血缘关系的进程间通信;管道内部自有机制来保护数据能读写完全;是一种面向流式的服务
父进程调pipe开辟管道,得到两个文件描述符指向管道两端;用fork创子进程,子进程也有两个文件描述符指向同一管道;父进程关闭管道写端,子进程关闭管道读端。
运行结果:
使用管道时应注意四种特殊情况:
1.指向管道的写端没关闭,但是也不写数据,此时指向管道的读端还一直再读数据,当读完管道的数据后,再次读会阻塞,知道管道中有数据了才读取数据并返回。
如图,当count等于5时,让它停止写入,此时读端会阻塞。
2.指向管道的读端没关闭,但是也不读数据,此时指向管道的写端还一直再写数据,当管道被写满时,再次写会阻塞。知道管道中有空位置了才写。(代码类似1)
3.如果指向管道的写端都关闭了,而指向管道的读端还在读,当剩余数据被读完后,再次读会返回0,好比已经读到文件结尾了。
4..如果指向管道的读端都关闭了,而指向管道的写端还在写,那么此时该进程会收到一个SIGPIPE,使进程异常终止。
命名管道:(FIFO)它可以用于任何两个进程间的通信,不管是否有血缘关系,它是存在于用盘上的文件,在文件系统中以文件名的方式存在,它是一个可见的文件。可以通过文件系统公共路径名来表示一个IPC通道。它按照先进先出原则,第一个被写入的数据总是第一个先被读出来。
写端往文件里里写入数据
读端读取数据
运行结果:
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
文章标题:进程间的通信-创新互联
标题链接:http://cdiso.cn/article/ddcheg.html