一、编译与工具链
GCC 编译流程
- 四阶段:预处理(
-E
,处理头文件 / 宏)→ 编译(-S
,生成汇编)→ 汇编(-c
,生成目标文件)→ 链接(生成可执行程序),顺序必须严格。 - 常用选项:
-Wall
(开启大部分警告)、-Werror
(警告视为错误),-w
是关闭警告(少用)。
交叉编译
- 必需组件:
gcc
(编译器)、glibc
(标准库)、binutils
(汇编 / 链接工具),tmake
不是必需(是 Qt 构建工具)。
二、进程与线程
进程基础
- 核心概念:进程是程序的动态执行实例(不是静态的),是资源管理最小单位,包含 PCB(进程控制块,动态维护进程状态)。
- 标识:PID 唯一标识进程,PPID 是父进程 ID(可为 0,如
init
进程)。 - 状态:基本状态是运行、就绪、阻塞,僵死态是特殊状态(非基本)。
- 创建与控制:
fork
:调用一次返回两次(父进程返回子进程 PID,子进程返回 0),用于创建子进程。wait/waitpid
:父进程阻塞等待子进程结束,waitpid
更灵活(可指定子进程、支持选项)。
线程(pthread 库)
- 关键函数:
pthread_create
:创建线程,arg
传参给线程函数。pthread_join
:等待线程结束,获取返回值。pthread_exit
:主动退出当前线程。pthread_cancel
:向目标线程发取消请求(不是退出当前线程)。
- 同步:条件变量必须配合互斥锁使用,解决线程竞争。
三、内存管理
堆栈核心区别
特性 | 栈(Stack) | 堆(Heap) |
---|---|---|
分配方式 | 系统自动分配 / 释放(函数调用驱动) | 用户手动 malloc/free 管理 |
内存连续性 | 连续 | 不连续(动态分配,易产生碎片) |
存储内容 | 局部变量、返回地址、函数参数 | 动态分配的大数据、复杂结构 |
增长方向 | 向低地址增长 | 向高地址扩展 |
大小限制 | 固定(默认 8MB 左右,可调整) | 动态扩展(受物理内存 / 交换空间限制) |
易错点
- 栈参数入栈顺序:从右往左(如
func(a,b,c)
,c
先入栈)。 - 静态变量:存储在全局 / 静态区,不入栈。
- 堆分配:找 “足够大” 的空闲块(非严格匹配申请大小),头部用多字节(如 4/8 字节)存元数据。
四、文件与权限
文件权限(10 位格式)
- 结构:
[文件类型][所有者权限][组权限][其他用户权限]
,例:-rwxr-xr--
。 - 第三段(5-7 位):文件所有者所在组的权限。
文件操作
open
标志:O_RDWR
(读写)、O_RDONLY
(只读)、O_WRONLY
(只写),操作完需close
释放描述符。
五、系统服务与运行级别
服务管理
- 启动脚本:传统存
/etc/rc.d/init.d/
,运行级别脚本存/etc/rc.d/rcN.d
(N
是级别)。 - 脚本前缀:
S
(启动)、K
(停止),无C
开头。 - 命令:
service 服务名 操作
(如service sshd restart
)。
六、网络与通信
协议核心区别(TCP/UDP)
特性 | TCP(传输控制协议) | UDP(用户数据报协议) |
---|---|---|
连接性 | 面向连接(三次握手建连) | 无连接 |
可靠性 | 可靠(确认、重传、排序) | 不可靠(无确认,丢包不重传) |
适用场景 | 文件传输、网页访问(需可靠) | 视频通话、广播(追求效率) |
端口复用 | 单连接(需 TIME_WAIT 释放端口) | 支持多应用同时用(如 DNS 服务) |
Socket 关键
- 类型:
SOCK_STREAM
(TCP)、SOCK_DGRAM
(UDP)、SOCK_RAW
(原始套接字),无SOCK DTRAN
。 - 函数原型:
socket(int family, int type, int protocol)
(创建套接字)。
七、其他高频考点
设备文件
- 串口设备:Linux 下是
ttyS0
(Windows 是COM1
)。
进程通信(IPC)
- 常用方式:管道、消息队列、共享内存(填这三个必对)。
中断服务程序
- 设计原则:短小、避免复杂操作,不能返回计算结果给主程序。
一句话总结:记住编译流程、进程线程核心函数、堆栈区别、权限结构、TCP/UDP 差异,这些是 Linux 笔试 / 面试高频考点!