一、Linux 系统编程
Linux 的系统编程(Linux System Programming )是指直接与操作系统内核提供的 系统调用(System Calls) 和 低级接口(Low-level Interfaces)交互的编程方式。它是介于应用程序开发和内核开发之间的一种编程层次,用来编写高性能、可靠并能直接控制系统资源的程序。
1. Linux 系统编程的核心概念
-
系统调用(System Call)
- 系统调用是用户空间程序与内核空间通信的主要接口。
- 常见的系统调用包括:
- 文件操作:
open(),read(),write(),close() - 进程控制:
fork(),exec(),wait(),exit() - 内存管理:
mmap(),brk() - 进程通信:
pipe(),socket(),shmget()等
- 文件操作:
- 它们为程序提供了访问内核资源的手段。
-
用户空间与内核空间
- 用户空间(User Space):应用程序运行的普通内存区域,不能直接访问硬件。
- 内核空间(Kernel Space):操作系统核心的执行区域,负责管理硬件和资源。
- 系统调用是两者之间受控的"桥梁"。
用户空间不能直接操作硬件资源,必须通过"系统调用"进入内核空间,请求内核来完成操作。
-
文件描述符(File Descriptor, FD)
- 在 Linux 中,几乎所有资源都被抽象为"文件",包括普通文件、设备、管道、socket。
- 每打开一个资源,内核就分配一个整数型"文件描述符"。
2. Linux 系统调用常见分类
| 类别 | 典型接口 | 使用场景 |
|---|---|---|
| 文件与目录 | open(), read(), write(), lseek(), stat() |
文件读写、权限管理 |
| 进程管理 | fork(), exec(), waitpid() |
创建、执行其他程序 |
| 信号处理 | signal(), sigaction() |
异步事件通知(如 Ctrl+C) |
| 多线程编程 | pthread_create(), pthread_mutex_lock() |
并发执行、多核利用 |
| 进程间通信 (IPC) | 管道、命名管道、共享内存、消息队列、信号量 | 数据交换、协同工作 |
| 网络编程 | socket(), bind(), connect(), send(), recv() |
TCP/UDP 通信 |
| 内存映射 | mmap(), munmap() |
高效文件访问或共享内存 |
| 时间与定时 | gettimeofday(), clock_gettime() |
计时与延时控制 |
3. 系统编程与应用编程的区别
| 对比点 | 系统编程 | 应用编程 |
|---|---|---|
| 层级 | 接近内核(使用系统调用) | 基于库或框架 |
| 接口 | POSIX 标准、C 接口 | 高级语言接口(Python、Qt 等) |
| 目标 | 性能、控制力、资源管理 | 开发效率、易用性 |
| 示例 | Shell、终端、守护进程 | 图形界面程序、网页应用 |