网络编程笔记二 (进程间通信IPC)
应用程序设计方式:
1.一个庞大的应用程序完成全部工作,程序的各个片段间通过函数参数、函数返回值、全局变量相互调用 2.使用IPC进行通信的多个应用程序,如unix工具使用shell管道 3.由多个使用IPC通信的应用程序组成的单个应用程序,通信发生在线程间(也以IPC称呼)
进程间通信都是通过它们都可以访问的介质里进行的,主要有管道、消息队列、共享内存+信号量
管道:
使用两个文件描述符表示的文件,一个用于读,一个用于写; 之所以只能用于有血缘关系的进程(父子、兄弟),在于某个祖先节点先创建了管道; fork()出的子进程也会复制该管道的描述符(有了访问途径),所以血缘关系的进程间能通过分别关闭代表读/写描述符来进行通信。 可以理解为,祖先发现了暗道,代代传给子孙 FIFO(有名管道):任何进程都能根据它在文件系统中路径名访问 使用文件来进行通信,形式上也是只能一边读一边写。
消息队列:
内核里的一个消息队列(链表实现),通信进程双方可以通过分别向里面放入、拿出消息进行通信
共享内存:
分配一块物理内存,任何进程都能访问,只要把它映射到自己的地址空间(虚拟内存),效率很高,不安全,所以要结合信号量来同步。