Head First C 第九章 进程与系统调用 出错处理

断了今生、忘了曾经 提交于 2020-02-29 02:47:55

Head First C 第九章 进程与系统调用 出错处理

大多数的系统调用以相同的方式出错

需求:想知道系统调用为什么会失败,因此所有的系统调用都遵循“失败黄金法则”。

尽可能的收拾残局

把errno变量设为错误码

返回-1

errno变量是定义在errno.h中的全局变量,和它定义在一起的还有很多标准错误码。

EPERM=1 不允许操作

ENOENT=2 没有该文件或目录

ESRCH=3 没有该进程

使用strerror打印标准错误

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main() {
  if (execl("ifconfig", "ifconfig", NULL) == -1)
    if (execlp("kryptonite", "kryptonite", NULL) == -1) {
      fprintf(stderr, "Can not run ipconfig:%s\n", strerror(errno));
      return 1;
    }
  return 0;
}
  • 系统调用在出错时通常会返回-1,但不是绝对的
  • 系统调用在出错的同时,将errno变量设为错误码。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!