管道是一种半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系的进程间使用,进程的亲缘关系通常是指父子进程关系,管道分为匿名管道和命名管道。,1、匿名管道, ,匿名管道是一种无需与任何文件系统相关联的
命名管道,它允许两个进程之间通过一个文件描述符进行双向通信,匿名管道主要用于具有亲缘关系的父子进程之间的通信。,创建匿名管道:,2、命名管道(Named Pipe), ,命名管道也是半双工的通信方式,但它允许无亲缘关系进程间的通信,命名管道分为本地命名管道和远程命名管道,本地命名管道只能在当前操作系统中使用,而远程命名管道可以在不同的操作系统中使用。,创建命名管道:,信号量是一个计数器,可以用来控制多个进程对共享资源的访问,它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,主要作为进程间以及同一进程内不同线程之间的同步手段,信号量分为两类:整型信号量和布尔型信号量,整型信号量可用于多进程及多线程间同步,4.24.1中提到了POSIX信号量,但是Windows不支持POSIX信号量,Windows上可以使用Windows API提供的Event对象来实现类似的功能,下面是基于Windows API的示例代码:, ,“
cpp//Create Semaphore for Mutexes in Windows API using CreateMutex function in Windows API.//Create Semaphore for Counting Down in Windows API using CreateEvent function in Windows API.//Create Semaphore for Counting Up in Windows API using CreateEvent function in Windows API.//Create Semaphore for Mutexes in POSIX OS using sem_open function in POSIX OS.//Create Semaphore for Counting Down in POSIX OS using sem_init function and sem_post function in POSIX OS.//Create Semaphore for Counting Up in POSIX OS using sem_init function and sem_wait function in POSIX OS.
`
三、消息队列(Message Queuing)消息队列是由消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管线长、只有发送者和接收者的问题,消息队列允许无亲缘关系进程间发送消息给对方,消息队列常作为进程间以及同一进程内不同线程之间的通信方法,四、共享内存(Shared Memory)共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的 IPC (Inter-Process Communication) 实现形式,它可以实现高速的数据共享,但它又要求进程间必须存在一个共同的句柄,具体可以参考以下示例代码:
`
cpp//Create Shared Memory in Windows OS using CreateFileMapping function in Windows OS.//Map Shared Memory in Windows OS using MapViewOfFile function in Windows OS.//Unmap Shared Memory in Windows OS using UnmapViewOfFile function in Windows OS.//Close Shared Memory in Windows OS using CloseHandle function in Windows OS.//Create Shared Memory in POSIX OS using mmap function in POSIX OS.//Unmap Shared Memory in POSIX OS using munmap function in POSIX OS.//Close Shared Memory in POSIX OS using close函数 in POSIX OS.
“五、套接字(Socket)套接字也可以用于
进程间通信,与其他通信方式相比,它是一个抽象的通信接口,使得不同类型的传输协议可以公用这个接口,套接字可以用于不同主机间的进程通信,即分布式进程间通信 (DPC),套接字的使用比较复杂,需要处理很多底层细节问题,这里不再详细介绍套接字的使用方法。,进程间通信(Inter-Process Communication,IPC)是指在多个进程之间进行信息交换的过程。IPC的目的一般有共享数据、数据传输、消息通知、进程控制等。常见的IPC方式有:共享内存、管道、消息队列、信号量等。
c 进程间通信
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《c 进程间通信》
文章链接:https://zhuji.vsping.com/386614.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
文章名称:《c 进程间通信》
文章链接:https://zhuji.vsping.com/386614.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。