进程间通信1 今天药忘吃喽~ 2022-07-16 05:12 181阅读 0赞 ## 管道 ## 管道由于传递数据只能单向传递,因此又称半双工管道,它是一种两个进程间进行单向通信的机制. **局限性**: *数据只能由一个进程流向另一个进程,若要进行全双工通信,则需建立两个管道. *管道只能用于具有亲缘关系的进程间通信. *管道无名字. *管道的缓冲区大小受限制. *管道所传递的是无格式的字节流,这就要求管道的输入和输出事先约定好数据格式. 使用管道进行通信时,两端的进程向管道读写数据是通过创建管道时,系统设置的文件描述符进行的. 管道是一个特殊的文件,这个文件只存在于内存中.在创建管道时,系统为管道分配一个页面作为数据缓冲区,进行管道通信的两个进程通过读写这个缓冲区来进行通信. 写入的数据每次添加在管道缓冲区的末尾,读数据时都是从缓冲区的头部读出数据. ## 管道的创建 ## linux下创建管道可以通过函数pipe完成,该函数如果调用成功返回0,并且数组中将包含两个新的文件描述符.如果有错误发生,则返回-1. ![这里写图片描述][20161007101340159] 管道两端分别用描述符fd\[0\]及fd\[1\]来描述. 管道两端的任务固定.fd\[0\]为管道读端,fd\[1\]为管道写端. 管道是一种文件,创建成功后就可以作为一般文件来使用,因此对文件操作的I/O函数都可以用于管道,如read(),write()等. **管道的一般用法** 进程在使用fork函数创建子进程前先创建一个管道,该管道用于在父子进程间通信.然后创建子进程,之后父进程关闭管道读端,子进程关闭管道写端,父进程负责向管道写数据,子进程负责读数据.也可以父进程关闭管道写端,子进程关闭管道读端. ## 管道的读写 ## ### 从管道中读数据 ### 要读取管道中数据的进程要关闭管道写端fd1,同时向管道写数据的进程应关闭读端fd0.(因为是用于具有亲缘关系的进程间通信,所以共享文件描述符).使用前,应及时关闭不需要的另一端,避免错误的发生. **进程在管道的读端读数据时**, 1.如果管道写端不存在,则读进程认为已经读到数据的末尾,读函数返回读出的字节数为. 2.若管道写端存在, (1)且请求读取的字节数大于PIPE\_BUF,则返回管道中所有数据, (2)如果不大于PIPE\_BUF,则返回管道中现有的所有数据(管道中数据量小于请求的数据量). 或返回请求的字节数(管道中数据量大于等于请求的数据量) ### 向管道中写数据 ### 如果某进程希望向管道中写入数据,那么该进程应关闭读端fd0文件描述符,同时管道另一端的进程关闭fd1. 向管道写入数据时,linux不保证写入的原子性. >**原子性**:操作在任何时候都不能被任何原因打断,操作要么不做要么就一定完成. 管道缓冲区一有空闲区域,写进程就会试图向管道写入数据,若读进程不读走缓冲区的数据,则写操作一直被阻塞等待. **在写管道时,如果请求的字节数小于等于PIPE\_BUF,则多个进程对同一管道的写操作不会交错进行,但如果有多个进程同时写一个管道,且某些进程要求写的字节数超过PIPE\_BUF所能容纳时,则多个写操作的数据可能会交错.** >只由管道读端存在时,向管道中写入数据才有意义.否则,向管道中写入数据的进程将收到内核传来的SIGPIPE信号,如果忽略或扑捉该信号并从其处理程序返回,则write出错,错误码为EPIPE. [20161007101340159]: /images/20220716/aa7b5e2d5fb147e1b2f0d56f3672da64.png
相关 进程间通信 管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道“我们之前说进程间通信的本质是让不同的进程看到同一份资源,管道就是其中... 一时失言乱红尘/ 2024年04月25日 20:18/ 0 赞/ 96 阅读
相关 进程间通信 进程间通信(IPC,Inter-Process Communication),是指两个或两个以上的进程之间传递数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位,每 ゞ 浴缸里的玫瑰/ 2023年01月02日 15:24/ 0 赞/ 170 阅读
相关 进程间通信笔记(1)—简介 进程间通信—简介 UNP卷1讲了网络通信,套接字编程的东西。卷2则是进程间通信IPC的内容,也要开始看了! 1.概述 IPC即进程间通信,全称(Interproc 「爱情、让人受尽委屈。」/ 2022年09月24日 14:21/ 0 赞/ 129 阅读
相关 进程间通信1 管道 管道由于传递数据只能单向传递,因此又称半双工管道,它是一种两个进程间进行单向通信的机制. 局限性: *数据只能由一个进程流向另一个进程,若要进 今天药忘吃喽~/ 2022年07月16日 05:12/ 0 赞/ 182 阅读
相关 进程间通信系列(1)概述 进程间的通讯需要达到的目的: 1.数据传输:一个进程需要将数据传送给另外一个进程,发送的数据量在一个字节到几兆字节之间; 2.数据共享:多个进程需要操作共享数据, 我不是女神ヾ/ 2022年06月18日 13:11/ 0 赞/ 217 阅读
相关 进程间通信 进程间通信的基本概念 进程间通信意味着两个不同进程间可以交换数据,操作系统中应提供两个进程可以同时访问的内存空间。 通过管道实现进程间通信 基于管道(P 港控/mmm°/ 2022年05月25日 09:42/ 0 赞/ 366 阅读
相关 进程间通信 程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(inte 谁践踏了优雅/ 2022年01月16日 14:09/ 0 赞/ 381 阅读
相关 进程间通信 转载自:[http://songlee24.github.io/2015/04/21/linux-IPC/][http_songlee24.github.io_2015_04_ 不念不忘少年蓝@/ 2021年09月23日 04:10/ 0 赞/ 505 阅读
相关 进程间通信 进程间通信 1. 前言 2. 使用文件实现进程间的通信 3. 使用管道实现进程间的通信 4. 共享内存 5. 以上三种通信方式的区别 青旅半醒/ 2021年08月30日 22:05/ 0 赞/ 524 阅读
还没有评论,来说两句吧...