IPC 进程间通信 interprocess communicate
无名管道:
pipe();-----------------------------------------------------------------------------------
pipefd[0] 读,pipefd[1] 写
生成两个文件描述符用于管道
0、1、2文件描述符已经被占用,所以从3开始
没创子进程时,父进程自己获得管道的读端和写端,自己写,自己读
fork() 之前打开文件和建立管道,子进程会继承父进程的文件表项和管道,可以利用父进程的写端fd[1] 和子进程的读端 fd[0] 进行单路通信,不必要的其它fd可以关掉
若是fork() 之后建立管道,则父子进程会建立各自的管道,则无法通信
先把 “quit” 写入管道中,再判断是否结束,子进程读到“quit” 则退出进程,父进程要进行收尸,再关掉文件描述符、退出。
因为read具有阻塞作用,所以当第二次循环上来打印完 “>” 后,子进程才打印出来,后来父进程再次输入时,前面就没有 “>” 号了
无名管道无法进行两个文件间进程的通信,只能进行有亲缘关系进程(继承)间通信(父-子-孙)
有名管道:
mkfifo();----------------------------------------------------------------------------------
man 3 mkfifo
不存在就创建,存在就直接往下走(若是都创建会报错)
单独地以读或写的方式打开,会阻塞,若是以读写的方式打开则相当于a.c直接获得了管道的读写两端,不会阻塞