第三章 系统编程介绍

系统编程介绍

系统编程与应用编程

  • 系统编程

ㅤ ㅤ在操作系统之上利用系统调用、C库进行对系统资源进行访问。如 apache、gcc、gdb等

  • 应用编程

ㅤ ㅤ在更高层次的编程接口或者库之上构建应用程序。如android程序(android sdk)、 iphone程序(iphone sdk)、QT程序设计(QT)、MFC程序设计(MFC)等.

系统资源

  • 处理器
  • 输入输出
  • 进程管理
  • 内存
  • 设备
  • 定时器
  • 进程间通信
  • 网络

系统调用

ㅤ ㅤ所有操作系统都提供多种服务的入口点,由此程序向系统核请求务。这些入口点被称之为系统调用(svstem call),

系统调用与C库关系

C库

ㅤ ㅤ这里我们所说的C库(libc),指的是标准C定义的C函数的集合。如标准输入输出函数、字符串处理函数、动态存储分配函数、日期时间函数、数学函数等。

ㅤ ㅤGNU发布的libc称为glibc

系统调用与C库关系

ㅤ ㅤ系统调用与C库从形式上来看都C函数

ㅤ ㅤC库函数有些是调用系统调用来实现的,比如说malloc、free调用brk, printf调用 write系统用,有些函数不需要任何系统调用,比如abs、strcpy、atoi等,因为它并不是必需要使用内核服务

ㅤ ㅤ系统调用通常提供的是最小界面,而C库函数通常提供更复杂的功能。

内核如何处理系统调用

  • 每个系统调用被赋予一个系统调用号
  • 在i386平台上,执行一个系统调用是通过int 0x80指令完成的。
  • eax存放系统调用号
  • ebx、ecx、edx、esi、edi存储系统调用参数,对于超过5个参数的系统调用,用一个寄存器指向用户空间存储所有系统调用参数的缓存。

错误处理

ㅤ ㅤ在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。
ㅤ ㅤerrno这个全局变量在<errno.h>头文件中声明如下:extern int errno;

错误处理函数

  • perror
  • strerror
错误码 解释
E2BIG 参数列表太长
EACCESS 权限不足
EAGAIN 重试
EBADF 错误的文件描述符
EBUSY 设备或资源忙
ECHILD 无子进程
EDOM 数学参数不在函数域内
EEXIST 文件已存在
EFAULT 地址错误
EFBIG 文件太大
EINTR 系统调用被中断
posted @ 2019-08-06 17:18  sfdevs  阅读(74)  评论(0)    收藏  举报