一:管道
有名管道:
1.可以用于互不相关的两个进程之间的通信。
2.可以通过指明路径创建管道,在文件系统中是可见的,可以当做普通文件进行读写操作。
3.遵循先入先出的规则,写入的数据添加在末尾。
操作步骤:1.创建有名管道。mkfifo():创建时指明路径和权限。
无名管道:
1.只能用于具有亲缘关系的进程之间的通信。如:fork()创建的父子进程。
2.是一个单工通信的通信模式。有固定的的读端和写端,fd[0]表示读端,fd[1]表示写端。
3.是一种特殊的文件,可以进行读写操作,但不输入任何文件系统,并且只存在于内存中。
4.在读写操作时,不能一直写入数据而不读数据,不然写入数据的进程会收到内核传过来的SIGPIPE信号(管道破裂)。
操作步骤:1.传建管道。pipe(int fd[2]):fd[2]存放管道对应的文件描述符。
二:信号:
信号进程间通信中唯一的一种异步通信机制,进程可以通过三种方式来响应信号:1.忽略信号,其中有两个信号不能被忽略,SIGKILL和SIGSTOP。2.执行默认操作。3.捕捉信号,当信号发生时,执行相应的处理函数。
操作步骤:1.发送信号。kill(pid_t pid,int sig):指定哪一个进程发送信号。raise(int sig):给自身发送信号。alarm(int sec):经过sec秒后给改进程发送SIGALARM信号。2.设置信号。signal():通过传入参数对对应信号进行处理。
三:共享内存:
进程间通信速率最快的一种通信方式。
用户不能直