基于C语言探索Linux进程间通信(IPC): 从入门到精通 | Linux Inter Process Communication (IPC) from Scratch in C
Linux 全面课程 – 涵盖套接字编程、Linux 系统编程及 C 编程 – 从入门到精通。
您将会学到
要求
掌握基础 C 语言至关重要
具备扎实的基础操作系统知识
学习的热情与积极性
描述
本课程旨在学习 Linux 进程间的通信方式。作为 Linux 系统编程的一个分支,我们将深入研究业界常用的各种进程间数据交换机制。课程将详细解析每种 IPC 机制的概念,讨论其实现方式,并分析在何种场景下,特定 IPC 机制相较于其他机制更具优势。
我们还探讨了应用程序应如何设计来利用底层 Linux 操作系统提供的进程间通信(IPC)功能。
你将在课程中尽可能多地完成作业,并且在整个课程中,你将有一个项目,逐步应用所学的新 IPC 技术。课程结束时,你将练习并应用本课程中学到的所有 IPC 技术。
每种 IPC 机制,我们都会进行详细的代码分析,展示实际中该 IPC 机制在发送和接收端的具体实现。当你进入行业后,从第一天起就会看到 IPC 概念在软件中广泛应用,以实现软件不同部分之间的通信。
谁适合学习这门课程?
本课程面向计算机科学专业本科生、求职者和专业开发者。对于希望加入跨国公司担任系统编程开发者的学生来说,这是一门必学的课程。在系统编程领域,几乎每次都需要使用 IPC 进行进程间的数据交换,因此计算机科学专业的毕业生若想在跨国公司找到开发者的工作,必须熟练掌握 IPC 的相关概念。
前置条件
如果你对 C 语言和操作系统有所了解,这将非常有帮助。我们设计这门课程时,假设学生是 Linux IPC 的完全初学者,并在从基础到高级概念的过程中,根据需要逐步提升课程的难度。
另外,请不要袖手旁观我的代码,请自己动手写代码,即便和我写的一样也没关系。
相关课程
RPC(远程过程调用)是网络中不同机器上两个进程间进行通信的另一种方式。你也可以查看我的另一门关于 Linux RPC 的课程,在那里你将学习如何从零开始实现 RPC。
本课程使用的编程语言是什么?
我们选择 C 语言作为这门课程的编程语言,理由非常充分
“IPC 是操作系统为开发者提供的一种机制,用于进程间的数据交换。通过用 C 语言学习 IPC,你可以深入了解系统背后的运作机制。C 语言确实揭示了系统实际运行的底层细节。在系统编程领域,C 是唯一的选择,甚至在系统编程方面都没有任何可以替代它的语言。”
不使用任何第三方库
无论你实现什么逻辑,都必须从零开始。本课程不鼓励使用任何第三方库来完成工作,因为使用外部库会完全违背课程的目的。不过,对于常用的数据结构(如链表、树、队列等),建议使用第三方库,这样可以节省大量时间来编写这些数据结构。
注意:虽然我们用 Linux 来讲解 IPC 技术,但 Linux 的 IPC 概念上与其他操作系统平台(如 Windows、iOS 等)差异不大。所以,如果你是其他平台的程序员,这门课程对你依然很有价值。
“本课程将探讨多种进程间数据交换的技术,但进程同步和锁等主题不在此课程范围内,并将单独讲解。”
警告:本课程提供自动生成的字幕,可能存在不完美之处。请根据个人需求选择关闭字幕。
课程内容
- 引言
- IPC 技术 1 – Unix 域套接字
- Socket API 介绍
- 套接字消息类型
- 套接字设计模式
- 接收系统调用
- 介绍 Unix 域套接字
- Unix 域套接字服务器实现
- Unix 域套接字客户端实现
- 多路复用
- 选择系统调用
- 多路复用服务器状态机
- 多路复用服务器实现
- 数据同步 – IPC 项目第一部分
- IPC 技术 2 – 消息队列
- 引言
- 消息队列作为内核资源
- 创建并打开消息队列
- 关闭消息队列
- 将数据入队到消息队列
- 从消息队列中取出数据
- 取消消息队列
- 从设计角度使用消息队列
- 双向通信
- 代码实现 – 实现步骤
- 示例
- IPC 技术第三种方法 – 共享内存
- 总体设计目标
- 虚拟内存的概念
- 程序控制块
- 共享内存基础知识
- 内核内存区域
- mmap() – 内存映射
- 设计要求
- 共享内存相关接口
- 数据同步 – IPC 项目第二部分
- IPC 技术第四部分 – 信号
- 引言
- Linux 擅长处理信号
- 信号生成与处理
- 通过 Kill() 发送信号
- 数据同步 – IPC 项目第三部分
- IPC 技术第 5 部分 – 网络套接字
- 套接字编程设计
- 选择系统调用
- 接收系统调用
- 多路复用概念
- 服务器状态机
- “Socket 编程项目第四部分:进程间通信”
- 在多种不同的进程间通信(IPC)机制上进行多路复用
- 使用 select() 实现对不同 IPC 接口的多路复用
此课程面向哪些人:
- 本科计算机科学专业的学生
- 研究生
- 系统编程领域的求职者 – 网络编程、驱动程序开发、分布式系统、物联网等