
进程间通信
文章平均质量分 97
专栏中绝大多数文章中都有完整的、可编译运行的源代码,该专栏主要讨论在Linux下的进程间通信(IPC),介绍了几乎所有的IPC方法,其中关于D-Bus的讨论并不多见;大多数范例为用户进程之间的IPC,也有通过IPC获取系统服务的例子;大多源代码除涉及IPC外还涉及多进程编程。该专栏将持续更新。
whowin
85年底开始接触IBM PC,进入这个行业,至今已37年余,现已退休;有记忆接触过的计算机系统有:PDP-11、VAX II、IBM PC/XT, PC/AT、PC-9801、APPLE II等;使用过的操作系统有:DOS、OS/2、UNIX、VMS、Linux、iRMX等;使用过的编程语言:BASIC、X86汇编、PASCAL、C、C++、PL/M、Perl、PHP、JAVA等;职业生涯的最后20年主要从事嵌入式开发;曾在军队服役13年,从事计算机软件工作,曾获军队科技成果二等奖;1986-1987曾赴云南参战;退役中国陆军少校。
展开
-
IPC之十六:D-Bus的标准接口、自省机制和服务接口的具体实现方法
D-Bus的规范中提供了一系列的标准接口,绝大多数有D-Bus接口的系统调用都会实现这些标准接口,这些标准接口中包括D-Bus的自省(Introspection)机制,自省机制可以让我们通过一个标准接口了解一个D-Bus服务的各种方法的调用方法,本文将介绍D-Bus的这些标准接口及实现方式,同时也会介绍如何在D-Bus上提供自有服务,本文附有完整的实例和完整的源代码;本文实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文不适合 Linux 编程的初学者阅读。原创 2024-01-11 12:01:24 · 731 阅读 · 0 评论 -
IPC之十五:使用libdbus通过D-Bus请求系统调用实现任意DNS记录解析的实例
关于D-Bus的文章中曾介绍了如何通过D-Bus调用系统服务从而实现解析出一个域名的IP地址的过程,本文我们继续调用系统调用来实现解析任意DNS记录,系统调用的方法与前一篇文章类似,只是方法名称和调用参数以及返回参数不同,本文将详细介绍systemd-resolved服务中的ResolveRecord方法,同前面几篇关于D-BUS的文章相同,本文将使用 libdbus 库实现系统服务的调用,本文给出了实现解析任意DNS记录的实例,附有完整的源代码;本文不适合 Linux 编程的初学者阅读。原创 2024-01-10 03:42:36 · 858 阅读 · 2 评论 -
IPC之十四:使用libdbus通过select()接收D-Bus消息的实例
在『进程间通信』系列文章中前面已经有三篇关于D-Bus的文章,本文继续讨论D-Bus;libdbus抽象了实现IPC时实际使用的方式(管道、socket等),libdbus允许在一个D-Bus连接上添加一个watch,通过watch对实际IPC中使用的文件描述符进行监视,本文讨论了如何在D-Bus连接中添加watch,如何使用在socket编程中常用的select从D-Bus返回的文件描述符中接收到D-Bus消息,本文给出了具体实例,附有完整的源代码;本文不适合Linux编程的初学者阅读。原创 2024-01-10 03:23:28 · 721 阅读 · 0 评论 -
IPC之十三:使用libdbus通过D-Bus请求系统调用实现域名解析的实例
前面两篇有关 D-Bus 的文章介绍了使用 libdbus 库进行进程间的方法调用和信号的传输,实际上 D-Bus 的更强大的地方是其建立了与大量系统服务之间建立了有效的对话规范,使得应用程序可以使用标准的方式调用系统服务的方法,访问系统服务中的一些开放的属性,本文将使用 libdbus 库调用系统服务中的方法从而实现域名解析,本文给出了实现该功能的实例,附有完整的源代码;本文实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文不适合 Linux 编程的初学者阅读。原创 2024-01-02 09:08:15 · 1207 阅读 · 0 评论 -
IPC之十二:使用libdbus在D-Bus上异步发送/接收信号的实例
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本 IPC 系列文章的前十篇介绍了几乎所有的常用的 IPC 方法,每种方法都给出了具体实例,前面的文章里介绍了 D-Bus 的基本概念以及调用远程方法的实例,本文介绍 D-Bus 的异步处理机制,以及信号处理的基本方法,本文给出了异步处理 D-Bus 的实例,附有完整的源代码;本文实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文不适合 Linux 编程的初学者阅读原创 2024-01-02 08:36:36 · 1450 阅读 · 0 评论 -
IPC之十一:使用D-Bus实现客户端向服务端请求服务的实例
IPC是Linux编程中一个重要的概念,IPC有多种方式,本IPC系列文章的前十篇介绍了几乎所有的常用的IPC方法,每种方法都给出了具体实例,本文介绍在Linux下IPC的另外一种实现,D-Bus,D-Bus是一种用于进程间通信的消息总线系统,它提供了一个可靠且灵活的机制,使得不同进程之间能够相互通信,本文给出了使用D-Bus进行基本IPC的实例,并附有完整的源代码;本文不适合Linux编程的初学者阅读。原创 2023-12-29 01:52:03 · 1777 阅读 · 1 评论 -
IPC之十:使用共享文件进行进程间通信的实例
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,常用的 IPC 方式有管道、消息队列、共享内存等,但其实使用广大程序员都熟悉的文件也是可以完成 IPC 的,本文介绍如何使用共享文件实现进程间通信,本文给出了具体的实例,并附有完整的源代码;本文实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文的实例中涉及多进程编程、文件锁等概念,所以对 Linux 编程的初学者有一些难度,但对于了解 Linux 下共享文件,特别是文件锁的应用,将是非常难得的。原创 2023-12-26 02:26:53 · 1209 阅读 · 0 评论 -
IPC之九:使用UNIX Domain Socket进行进程间通信的实例
socket编程是一种用于网络通信的编程方式,在socket的协议族中除了常用的AF_INET、AF_RAW、AF_NETLINK等以外,还有一个专门用于IPC的协议族AF_UNIX,IPC是Linux编程中一个重要的概念,常用的IPC方式有管道、消息队列、共享内存等,本文主要介绍用于本地进程间通信的UNIX Domain Socket,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在Ubuntu 20.04上本文的实例中涉及多进程编程等,本文对Linux编程的初学者有一些难度。原创 2023-12-22 02:34:59 · 3734 阅读 · 0 评论 -
IPC之八:使用 POSIX 共享内存进行进程间通信的实例
IPC是Linux编程中一个重要的概念,IPC有多种方式,本文主要介绍共享内存(Shared Memory),因为没有像管道、消息队列这样的中介介入,所以通常认为共享内存是迄今为止最快的IPC方式;Linux既支持UNIX SYSTEM V的共享内存段,也支持POSIX的共享内存对象,本文针对POSIX共享内存对象,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文的实例中涉及多进程编程和号处理等,阅读本文还需要一些基本的内存管理知识,本文对 Linux 编程的初学者有一些难度。原创 2023-12-19 02:13:51 · 1149 阅读 · 0 评论 -
IPC之七:使用 System V 共享内存段进行进程间通信的实例
IPC是Linux编程中一个重要的概念,IPC有多种方式,本文主要介绍共享内存(Shared Memory),因为没有像管道、消息队列这样的中介介入,所以通常认为共享内存是迄今为止最快的IPC方式;Linux既支持UNIX SYSTEM V的共享内存,也支持POSIX的共享内存,本文针对System V共享内存段,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在Ubuntu 20.04上编译测试通过;本文的实例中涉及多进程编程和信号处理等,对初学者有一定难度。原创 2023-12-15 13:55:06 · 489 阅读 · 0 评论 -
IPC之六:使用 POSIX 信号量解决经典的‘生产者-消费者问题‘
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍信号量(Semaphores),尽管信号量被认为是 IPC 的一种方式,但实际上通常把信号量用于进程间同步或者资源互斥,和共享内存(Shared Memory)配合使用,可以实现完美的进程间通信;Linux 既支持 UNIX SYSTEM V 的信号量集,也支持 POSIX 的信号量,本文针对 POSIX 信号量,本文给出了多个具体的实例,每个实例均附有完整的源代码。原创 2023-12-12 02:23:49 · 556 阅读 · 0 评论 -
IPC之五:使用 System V 信号量集解决经典的‘哲学家就餐问题‘
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍信号量集(Semaphore Sets),尽管信号量集被认为是 IPC 的一种方式,但实际上通常把信号量集用于进程间同步或者资源访问互斥,信号量集和共享内存(Shared Memory)配合使用,可以实现完美的进程间通信;Linux 既支持 UNIX SYSTEM V 的信号量集,也支持 POSIX 的信号量集,本文仅针对 SYSTEM V 信号量集;本文给出了多个具体的实例,每个实例均附有完整的源代码。原创 2023-12-08 09:27:32 · 499 阅读 · 0 评论 -
IPC之四:使用 POSIX 消息队列进行进程间通信的实例
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍消息队列(Message Queues),消息队列可以完成同一台计算机上的进程之间的通信,相比较管道,消息队列要复杂一些,但使用起来更加灵活和方便,Linux 既支持 UNIX SYSTEM V 的消息队列,也支持 POSIX 的消息队列,本文针对 POSIX 消息队列,POSIX 标准引入了一个简单的基于文件的接口,使应用程序可以轻松地与消息队列进行交互;本文给出了多个具体的实例,每个实例均附有完整的源代码。原创 2023-12-08 09:11:11 · 774 阅读 · 0 评论 -
IPC之三:使用 System V 消息队列进行进程间通信的实例
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍消息队列(Message Queues),消息队列可以完成同一台计算机上的进程之间的通信,相比较管道,消息队列要复杂一些,但使用起来更加灵活和方便,本文针对 System V 消息队列,并给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文适合 Linux 编程的初学者阅读。原创 2023-08-08 17:40:43 · 539 阅读 · 0 评论 -
IPC之二:使用命名管道(FIFO)进行进程间通信的例子
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍命名管道(FIFO),命名管道可以完成同一台计算机上的进程之间的通信,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文适合 Linux 编程的初学者阅读。原创 2023-08-08 17:32:37 · 439 阅读 · 0 评论 -
IPC之一:使用匿名管道进行父子进程间通信的例子
IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍匿名管道(又称管道、半双工管道),尽管很多人在编程中使用过管道,但一些特殊的用法还是鲜有文章涉及,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文适合 Linux 编程的初学者阅读原创 2023-08-08 17:25:56 · 363 阅读 · 0 评论