《UNIX系统编程》笔记一_经验分享

上图是系统调用的大致过程,我们先调用一个名为sys_xyz的系统函数,然后glibc(GNU C语言 函数库)外壳函数会发出一个中断指令(int 0x80),进而从用户态切换到内核态,每一个系统调用都对应一个系统调用编号sys_call_table是一个存放了所有调用系统服务例程的列表,它会根据系统调用编号进行索引,查找到对应的系统调用服务例程,这时xyz()函数就被调用了,该函数执行结束后,向system_call返回返回值,然后system_call再将返回值返回给外壳函数,处理器切换至用户态

以上过程只是针对x86-32处理器而言,对于其他型号的处理器可能会有细微差别

在这之前,先说一下C语言建立头文件的方式

其实就是把一段完整的程序拆分成了好几段
《UNIX系统编程》笔记一_经验分享_02

首先,头文件声明一个自定的函数,然后由一个包含了该自定义头文件的源程序对该函数进行实现,最后在main.c中包含该头文件,并可调用该头文件中的方法,其实上图中这三段程序,就是这一段程序拆开来写的:

#include<stdio.h>

void printHello(void);

int main(void) {
    printHello();
    return 0;
}

void printHello() {
    printf("hello world!\n");
}

输出结果:
《UNIX系统编程》笔记一_经验分享_03