Linux系统编程01_入门介绍

系统编程的标准

C语言标准<POSIX C

 

系统调用

它是系统编程中最重要的一个概念,实际上是内核提供的一个接口,这个接口区分了用户空间和内核空间,用户空间的程序是不能其接操作内核代码或内核数据。用户进程通过发送信号给内核调用系统调用,从用户空间内陷入内核空间,执行内核允许执行的代码。

在Linux中,可以使用man 2 系统调用名 来查看详情。

 

C库与系统调用的关系

  1. C库是标准C定义的函数库。
  2. C库函数有部分也是通过系统调用实现的。
  3. C库函数一般都有缓冲机制,而系统调用则没有。
  4. C库函数提供了复杂的功能,而系统调用则只提供最小界面。

系统用用

 

内核处理系统调用

应用程序通过机器寄存器通知内核执行哪一个系统调用,带什么参数。以i386架构为例:

  1. 系统调用通过数字标注,从0开始。要想请求系统调用5,用户空间程序必须在使用int指令前将5填写到eax寄存器中。
  2. 参数传递也通过类似的方式进行处理。寄存器被用于每一个可能的参数——寄存器ebx、edx、esi和edi顺序存敫前5个参数。对于一些少见的超过5个参数的系统调用,使用一个寄存器指向用户空间中存放的所有参数的缓冲区即可。
  3. 通过执行int0x80这个软中断指令来调用系统调用,int0x80指令执行位于eax寄存器中存放的系统调用号,从用户态切换到内核态。先知道了eax寄存器中的系统调用号,然后再执行int0x80指令。

 

错误处理

在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。

函数通过特殊的返回值(通常是-1,具体值取决于函数),来通知调用者所发生的错误。错误值告诉函数发生了错误,但是不提供发生错误的原因,errno变量用于定位错误的原因。
errno这个全局变量在<errno.h>头文件中声明如下:extern int errno;


错误处理函数
perror
strerror

你可能感兴趣的:(系统编程)