Socket与系统调用深度分析
一、什么是系统调用 linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态。 系统调用的意义如下: 1.把用户从底层的硬件编程中解放出来 2.极大的提高了系统的安全性 3.使用户程序具有可移植性 一般进程是不能访问内核的,而系统调用是用户态进入内核态的唯一入口 二、系统调用与API之间的关系 1.API和系统调用的区别: API只是一个函数定义 系统调用通过软中断向内核发出一个明确的请求 2.Libc库定义的一些API引起了封装例程(wrapper routine,唯一的目的就是发布系统调用) 一般每个系统调用对应一个封装例程 库再用这些封装例程定义出给用户的API 3.不是每个API都对应一个特定的系统调用 首先,API可能直接提供用户态的服务(比如一些数学函数) 其次,一个单独的API可能调用几个系统调用不同的 API可能调用了同一个系统调用 4.返回值 大部分封装例程返回一个整数,其值得含义依赖于相应的系统调用 -1在多数情况下表示内核不能满足进程的请求 Libc中定义的errno变量包含特定的出错码 三