
书: 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
跟踪库函数调用,快速诊断程序行为。”