系统调用
是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组接口来获得系统内核提供的服务。在linux中,为了更好的保护内核空间,将程序的运行分为内核空间和用户空间(即常说的内核态和用户态),他们在逻辑上是相互隔离的。
linux系统调用部分是非常精简的系统调用(约250个左右),它继承了UNIX系统调用中最基本和最有用的部分,这些系统调用按照功能逻辑大致课分为进程控制、进程间通信、文件系统控制、系统控制、存储管理、网络管理、socket控制、用户管理等几类。
用户编程接口(API)
系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获得内核服务的接口。在实际使用中,通过用户编程接口--API,也就是常说的API函数。
在linux中,API遵循了UNIX中留下的应用编程界面标准--POSIX.用于保证应用程序可以在源代码一级上的多种操作系统上的移植运行,这些系统调用接口主要是通过C库(libc)实现的。
系统命令
系统命令相对于API更搞了一层,它实际上是一个可执行的程序,他的内部引用了用户编程接口(API)来实现相应的功能.
文件描述符
在linux中,所有的设备和文件操作都使用文件描述符(file descriptor)来进行的 ,文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非 Unix 内核的特性,但是因为一些 shell 和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。
POSIX 定义了 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 来代替 0、1、2。这三个符号常量的定义位于头文件 unistd.h。启动一个进程时,这3个文件就会被打开。