进程间的通信:管道 信号量 消息队列 socket套接字
管道:线性字节数组,类似文件,使用文件读写的方式进行访问
管道分为:
有名管道:fifio 相当于创建了一个文件,这个文件只要有权限的,所有人都能来访问(不相关的进程也能进行数据的交换)
无名管道:pipe 只能由父子进程进行使用,返回两个文件描述符
创建管道时系统调用popen()或者pipe(),popen需要提供一个目标进程作为参数,然后再调用该函数的进程和目标进程之间创建一个管道,是有名管道。
管道和记名管道不是所有操作系统都支持,主要支持管道通信方式的是UNIX和类UNIX(如Linux的操作系统)
同一主机,一个管道可以被多个进程打开,多个管道之间互不影响,服务器端可以创建一个管道文件,然后,客户端的进程可以通过open;来打开服务器的管道文件。
管道的一个特点是,使用管道的两个线程之间必须存在某种关系,例如:使用popen()需要提供另一端进程的文件名,使用pipe()两个进程必须隶属于父子进程。
信号量:用来在进程的通信时表示现在进行到那个状态了,而使另外一个进程进行下面的操作。