
书: https://pan.baidu.com/s/1o53U8DJYBlzPKes4X47C8Q?pwd=ymj8
笔记如下:
- “Linux下C编程的首要工具链:GCC编译器(
gcc)、GDB调试器(gdb)和Make构建工具。” - “指针是C语言的灵魂,理解
指针+内存模型是突破初级的关键。” - “
main(int argc, char *argv[])的参数argc表示命令行参数个数,argv存储参数字符串数组。” - “头文件(
.h)声明接口,源文件(.c)实现逻辑,通过#include实现分离编译。” - “静态库(
.a)与动态库(.so)的区别:前者编译时链接,后者运行时加载。” - “
Makefile的核心规则:target: dependencies → command,变量简化重复路径。” - “文件描述符(File Descriptor)是Unix一切皆文件的体现,
0/1/2对应标准输入/输出/错误。” - “系统调用(如
open()、read())是用户态与内核态的桥梁,执行时触发软中断(int 0x80)。” - “进程创建通过
fork()实现,子进程复制父进程的地址空间,exec()系列函数加载新程序。” - “信号(Signal)是异步事件通知机制,
SIGKILL(强制终止)和SIGTERM(优雅退出)需区分处理。” - “管道(
pipe)实现进程间通信,匿名管道限于父子进程,命名管道(mkfifo)可跨无关进程。” - “
mmap()将文件映射到内存,避免频繁read/write,提升I/O效率。” - “多线程需关注线程安全(Thread Safety),互斥锁(
pthread_mutex_t)保护临界区。” - “
volatile关键字防止编译器优化对硬件寄存器的读写,常用于嵌入式开发。” - “内存泄漏检测工具
valgrind可定位未释放的堆内存(malloc/free不匹配)。” - “
errno全局变量存储系统调用错误码,perror()或strerror()将其转为可读信息。” - “
getopt()函数解析命令行选项,支持短选项(如-h)和长选项(如--help)。” - “
select()/poll()实现I/O多路复用,高并发场景下比多线程更轻量。” - “
setjmp()和longjmp()实现非局部跳转,模拟异常处理机制。” - “掌握
strace跟踪系统调用、ltrace跟踪库函数调用,快速诊断程序行为。”