【Linux开发】IPC

IPCInter-Process Communication,进程间通信,准确的来说IPC是用于实现不同进程中的线程之间的通信。注意进程间通信和(同一个进程中的)线程间通信是有区别的,一个进程中的所有线程都在同一个寻址空间,可以直接使用全局变量(包含信号量、消息队列等)进行通信,而不同进程拥有不同的内存映射空间,所以不同进程中的线程是无法直接进行通信的。

来个应用场景举例。

打开两个应用:浏览器和迅雷下载器,在网页上浏览一个下载链接,点击下载,会直接跳转到迅雷下载器中进行下载。很显然浏览器和迅雷是两个不同的进程,在浏览器上操作,会反应到迅雷上,这就是典型的进程间通信的例子。

Linux上的实现IPC有多种方式:

    (1) 半双工Unix管道
    (2) FIFOs(命名管道)
    (3) 消息队列
    (4) 信号量
    (5) 共享内存
    (6) 网络Socket

执行命令 ipcs 查看系统当前IPC通道信息:

root@OrangePI:/samba_root/OrangePi_CedarX/cedarx# ipcs

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 98304      lightdm    600        524288     2          dest
0x00000000 131073     lightdm    600        33554432   2          dest

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

这里显示了三种分别是消息队列、共享内存、信号量,这也是使用较多的三种IPC方式。一个 IPC 至少包含 key值、ID值、拥有者、权限和使用的大小等关键信息。如果需要手工删除某个 IPC 机制,可以使用 ipcrm 命令。

Linux下的IPC程序设计参考文章:

Linux进程间通信——使用命名管道:https://blog.csdn.net/ljianhui/article/details/10202699

Linux进程间通信——使用信号量:https://blog.csdn.net/ljianhui/article/details/10243617

Linux进程间通信——使用共享内存:https://blog.csdn.net/ljianhui/article/details/10253345

Linux进程间通信——使用消息队列:https://blog.csdn.net/ljianhui/article/details/10287879

Linux进程间通信——使用流套接字(TCP):https://blog.csdn.net/ljianhui/article/details/10477427

Linux进程间通信——使用数据报套接字(UDP):https://blog.csdn.net/ljianhui/article/details/10697935

猜你喜欢

转载自blog.csdn.net/tq384998430/article/details/100012597