interprocess communicate为什么需要ipc 进程空间都是独立。但是进程和进程之间有数据共享或交换的需求。一、种类1、古老的通信方式管道的底层实现是 队列。1无名管道2有名管道3信号2、IPC对象通信system v BSD suse fedora kernel.org消息队列(用的相对少) 共享内存 信号量集3、socket通信网络通信二、无名管道匿名管道 unnamed pipe无名管道 》 pipe 》只能给有亲缘关系进程通信管道的特性1、管道是 半双工的工作模式 实际编程使用会当单工使用。2、所有的管道都是特殊的文件不支持定位操作。如lseek- fd fseek -FILE*3、管道是特殊文件读写(首选)使用文件IO open,read,write,close; 可选(标准io带缓存区) fgets,fread,fgetc,管道容易发生的状态编程顺序创建管道 》fork 》读写管道 》关闭管道三、有名管道有名管道 》 fifo 》 可以给任意单机进程通信.有文件名称的管道。文件系统中可见编程步骤创建有名管道 》打开有名管道 》读写管道 》关闭管道 》卸载有名管道特性和匿名管道特性一致。 额外的 如果有一端没有打开则默认在open函数部分阻塞。四、信号通信1. 应用异步通信。 通知机制。 随机事件2. 信号发送和接收的过程1) 根据需要(随机事件)发生信号。2) linux 接收到信号发生请求在pcb的链表中查找对应的pid号(1000)3) 找到对应进程后使原来工作流程先暂停下执行pcb 中信号处理函数 对应下标的函数。例如如果发送 信号2 则调用handle24当handle2 执行完毕后原来进程的代码继续运行。3. 系统中对信号的说明和相关默认处理行为man 7 signal4. 信号相关函数五、共享内存由 system V (unix 操作系统) 提供一种进程间通信的方式。1. 函数调用的步骤key 》申请对象 》映射对象 》读写对象 》撤销映射 》删除对象2. 与管道相关区别1对于读写进程而言 双方都可以读写2没有读阻塞3没有写阻塞。 共享内存需要和其他ipc(信号或信号量集(同步操作)) 进行搭配使用4是一个初级内存区域 (像字符数组)5不删除数据数据保持的6相对来说共享内存空间可以自定义(4K *n ), 大空间3. 相关函数接口4. 相关命令