Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。在《APUE》这本书中讲的绝大部分函数都是系统调用,而非库函数。
![](https://i-blog.csdnimg.cn/blog_migrate/f0102bc51a29f8b937174404634950d4.png)
系统调用
系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。
可以举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息,程序中调用
了printf() 函
数,而
库函数 printf 是将需要打印的信息输出到屏幕这个硬件设备上。我们知道,对于所有硬件设备的操作都需要驱动程序,而驱动程序是由操作系统内核实现的。这也就意味着我们的printf()函数最终需要调用Linux内核的相关函数来操作屏幕这个设备,而这些函数就是系统调用。事实上printf()库函数的实现里最终会调用系统调用 write() 。