【Linux系统】系统编程
一、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、终端、守护进程 | 图形界面程序、网页应用 |