作者:多米音乐_34067977 | 来源:互联网 | 2023-06-04 04:03
Pipe:用与进程间通信。1问:进程间为什么通信要借助管道?答:进程由于独立的内存,彼此间不可通过局部变量之类的访问交流。所以要借助创建者操作系统的力量(当个快递员)让二者联系起来
Pipe:用与进程间通信。
1问:进程间为什么通信要借助管道?
答:进程由于独立的内存,彼此间不可通过局部变量之类的访问交流。所以要借助创建者操作系统的力量(当个快递员)让二者联系起来。
2问:操作系统怎么就用管道让两者通信了呢?
答:管道创建两个文件描述符,一个专门读,一个专门写。父子进程通过fork(操作系统的力量)共享该两个文件描述符,然后读写即可形成单方向通道。详见下图:
盗个图,( ╯□╰ )
3.问:为什么pipe创建两个文件描述符呢?一个不好吗?
答:必须要两个才能单向通道,如果仅以个,父进程写。子进程读。
考虑子进程要等着读数据,没有数据时读要等待。父进程写完了,子进程read就不应阻塞了吧,但是子进程没有判断依据呀我怎么知道父进程时暂时没发还是永久不发呢?
两个文件形成图第三步的单通道,父进程关了写端,子进程收到写端fd[1]全关了的依据,判断管道没数据就直接结束。(所以上图第二步要父进程光写就把读端关了,子进程把写端关了,目的就是要保证双方有足够的依据判断对方什么状态。)