①🍎 System V 实际上就是一个标准(“ 行业领头羊制定出来的专利 " )
①消息队列;②共享内存;③信号量;
上面这三种是有比较成型的标准才有的,后面慢慢形成较为复杂模板的通信方式,那么在此之前有没有更为简单的通信方式呢?
答案肯定是有的,就是管道
(直接复用内核代码进行通信)
①🍎为什么父子进程会向同一个显示器终端打印数据呢?
因为父进程 fork()一个子进程,子进程继承父进程,所以两个进程的文件描述符表一样,所以查表可知同同一个显示器终端打印。
②🍎 进程会默认打开三个标准输入输出错误:0,1,2…怎么做到的呢?
他们都是 bash 的子进程,bash父进程打开了,所以子进程就会打开。
③🍎 为什么我们子进程主动 close(0/1/2),不会影响父进程使用显示器文件呢?
从下图可知,我们只需要把子进程的文件描述符信息表中的指针进行修改即可;
细节注意点:❗
①🍌管道只允许单向通信,即:父----->子(父进程写,子进程读)或者 子---->父(子进程写,父进程读),不可两者都同时写;
①🍎父子之后要关闭不需要使用的 fd(读或者写接口),为什么要在开始的时候全部打开呢?
为了子进程继承父进程的读写,因为如果父进程只有写的话,子进程也只能有写,如果子进程之后想要读的话,就不可以了;