12.1 Linux 系统调用浅析
系统调用就是让用户进程申请操作系统的帮助,让操作系统帮其完成某项工作,相当于用户进程调用了操作系统的功能。
Linux 系统调用是用中断门来实现的,只占用一个中断向量号 0x80。在系统调用之前,Linux 在寄存器 eax 中写入子功能号,中断处理例程会根据 eax 的值来判断用户进程申请哪种系统调用。
12.2 系统调用的实现
12.2.1 系统调用实现框架
一个系统功能调用分为两部分,一部分是暴露给用户进程的接口函数,它属于用户空间,此部分只是用户进程使用系统调用的途径,只负责发需求。另一部分是与之对应的内核具体实现,它属于内核空间,此部分完成的是底层需求。
12.3 让用户进程“说话”
12.3.1 可变参数的原理
Linux 为方便引用函数中的可变参数,编译器 gcc 的头文件 stdarg.h 中定义了 3 个宏:va_start
、va_end
和 va_arg
。