随笔分类 - Linux C dev
摘要:本文介绍如何使用 C 语言创建 Linux 系统中 SysV 风格的 daemon 程序。注意:这是一种旧式的 daemon 程序写法,进入 systemd 时代后是不需要通过这样的方式创建 daemon 程序的。 本文的演示环境为 ubuntu 18.04。 创建 daemon 程序的流程 通过前
阅读全文
摘要:管道(pipe)是进程间通信的一种实现方式。在 Linux 系统中,管道本质上是一种特殊的文件,它的主要用途是实现进程间的通信。文中演示所用环境为 Ubuntu 18.04 desktop。 在 shell 中执行下面的命令: echo 命令的输出通过管道作为了 cat 命令的输入。这里面的具体操作
阅读全文
摘要:消息队列和共享内存、信号量一样,同属 System V IPC 通信机制。消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问。使用消息队列的好处是对每个消息指定了特定消息类型,接收消息的进程可以请求接收下一条消息,也可以请求接收下一条特定类型的消息。 相关数据结构 与其他两
阅读全文
摘要:本文继《System V IPC 之共享内存》之后接着介绍 System V IPC 的信号量编程。在开始正式的内容前让我们先概要的了解一下 Linux 中信号量的分类。 信号量的分类 在学习 IPC 信号量之前,让我们先来了解一下 Linux 提供两类信号量: 内核信号量,由内核控制路径使用。 用
阅读全文
摘要:IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 和其他进程共享一段内存区 System V IPC 最初是在一个名为 "Columbus Unix
阅读全文
摘要:Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信。socket 原本是为网络通讯设计的,但后来在 socket 的框架上发展出一种 IPC 机制,就是 UNIX domain soc
阅读全文
摘要:在 TCP/IP 协议中,"IP地址 + TCP或UDP端口号" 可以唯一标识网络通讯中的一个进程,"IP地址+端口号" 就称为 socket。本文以一个简单的 TCP 协议为例,介绍如何创建基于 TCP 协议的网络程序。 TCP 协议通讯流程 下图描述了 TCP 协议的通讯流程(此图来自互联网):
阅读全文
摘要:Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态。例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止。如果子进程已经终止,那么,它的终止代号将告诉父进程这个任务是否已成功地完成。为了遵循这些设计原则,不允许 L
阅读全文
摘要:Linux 操作系统紧紧依赖进程创建来满足用户的需求。例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令。Linux 系统中通过 fork/vfork 系统调用来创建新进程。本文将介绍如何使用 fork/vfork 系统调用来创建新
阅读全文