出错处理函数abort、exit、atexit、strerror. . .2010-06-30 22:43摘要:本文详细讲述了几个出错处理的函数abort、exit、atexit、strerror函数的使用方法,并给出来具体的示例程序。 函数名: abort 功 能: 异常终止一个进程 用 法: void abort(void); 头文件:#include 说明:abort函数是一个比较严重的函数,当调用它时,会导致程序异常终止, 而不会进行一些常规的清除工作,比如释放内存等。 程序例: #include #include int main(void) { puts( "About to abort..../n" ); abort(); puts( "This will never be executed!/n" ); exit( EXIT_SUCCESS ); } [root@localhost error_process]# gcc abort.c [root@localhost error_process]# ./a.out About to abort.... 已放弃 ----------------------------------- 头文件 #include定义函数 void exit(int status); exit()用来正常终结目前进程的执行,并把参数 status 返回给父进程, 而进程所有的缓冲区数据会自动写回并关闭未关闭的文件。 它并不像abort那样不做任何清理工作就退出,而是在完成所有的清理工作后才退出程序。 ---------------------------------------- atexit(设置程序正常结束前调用的函数) 头文件 #include定义函数 int atexit (void (*function)(void)); 返回值 如果执行成功则返回 0,否则返回-1,失败原因存于 errno 中。 atexit()用来设置一个程序正常结束前调用的函数。当程序通过调用 exit()或从 main 中返回时,参数 function 所指定的函数会先被 调用,然后才真正由 exit()结束程序。 很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、在程序的某个地方用exit() 结束程序、用户通过Ctrl+C或Ctrl+break操作来终止程序等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理。方法就 是用atexit()函数来注册程序正常终止时要被调用的函数。 atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:int atexit (void (*)(void)); 在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。 #include #include void my_exit(void) { printf( "Before exit..../n" ); } int main(void) { atexit( my_exit ); return 0; } [root@localhost error_process]# gcc atexit.c [root@localhost error_process]# ./a.out Before exit.... ----------------------------------------------------- strerror(返回错误原因的描述字符串) 头文件 #include定义函数 char * strerror(int errnum); strerror() 用来依参数 errnum 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。 这时如果把 errno 传个strerror,就可以得到可读的提示信息,而不再是一个冷冰冰的数字了。 返回值 返回描述错误原因的字符串指针。 #include #include int main(void) { int i; for ( i=0; i<10; i++ ) { printf( "%d:%s/n", i, strerror(i) ); } return 0; } [root@localhost error_process]# gcc strerror.c [root@localhost error_process]# ./a.out 0:Success 1:Operation not permitted 2:No such file or directory 3:No such process 4:Interrupted system call 5:Input/output error 6:No such device or address 7:Argument list too long 8:Exec format error 9:Bad file descriptor [root@localhost error_process]# http://hi.baidu.com/flyownway/blog/item/0cfb6703842d85ea08fa93b0.html ------------------------------------------------ 3.9 错误处理 正如我们已经看到的,本章介绍的许多系统调用和函数 都会因为各种各样的原因而失败。失败时,它们会设置外部变量errno的值来指明失败的原因。许多不同的函数库都把这个变量用做报告错误的标准方法。我们 也反复告诫大家,程序必须在函数报告出错之后立刻检查errno变量,因为它可能被下一个函数调用所覆盖,即使下一个函数自身并没有出错,也可能会覆盖这 个变量。 错误代码的取值和含义都列在头文件errno.h里,其中包括: l EPERM:操作不允许。 l ENOENT:文件或目录不存在。 l EINTR:系统调用被中断。 l EIO:I/O错误。 l EBUSY:设备或资源忙。 l EEX IST:文件存在。 l EINVA L:无效参数。 l EMFILE:打开的文件过多。 l ENODEV:设备不存在。 l EISDIR:是一个目录。 l ENOTDIR:不是一个目录。 有两个非常有用的函数可以用来报告出现的错误,它们是strerror和perror。 3.9.1 strerror函数 strerror函数把错误编码映射为一个字符串,该字符串对发生的错误类型进行说明。这在记录错误条件时十分有用。 函数原型如下: 3.9.2 perror函数 perror函数也把error变量中报告的当前错误映射到一个字符串,并把它输出到标准错误输出流。该字符串的前面先加上参数s(如果s不为空)给出的信息,再加上一个冒号和一个空格。 函数原型如下: 请看下面的例子: 它会在标准错误输出中给出如下的输出结果: http://hi.baidu.com/steven0821/blog/item/8c695112e67197f1c2ce7931.html

出错处理函数abort、exit、atexit、strerror相关推荐

  1. linux abort 头文件,Linux编程—出错处理之assert,abort,exit,atexit,strerror

    Linux编程--出错处理之assert,abort,exit,atexit,strerror 1.assert() http://blog.chinaunix.net/u/16292/showart ...

  2. C/C++ Linux 出错处理函数(strerror 与 perror)

    我们知道,系统函数调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息. 有两种方式: 1. strerror - 需要将错误信息输出到日志: 2. ...

  3. abort函数和exit函数

    函数名: abort 功 能: 异常终止一个进程 用 法: void abort(void); 头文件:#include <stdlib.h> 说明:abort函数是一个比较严重的函数,当 ...

  4. Linux--进程的终止(正常和异常)、钩子函数、exit函数和_exit或_Exit函数

    进程的终止 正常终止 1.从main函数返回 2.调用exit 3.调用_exit或_Exit 4.最后一个线程从其启动例程返回 5.最后一个线程调用pthread_exit 异常终止 1.调用abo ...

  5. UNIX再学习 -- 函数abort

    abort 函数之前有讲过的,参看:C语言再学习 -- 关键字return和exit ()函数 然后我们在讲 8 中进程终止时,也说过.参看:UNIX再学习 -- exit 和 wait 系列函数 下 ...

  6. _exit()函数与exit()函数的区别

    exit()在结束调用它的进程之前,要进行如下步骤: 1.cleanup(): 2.在atexit()注册的函数: 'exit()'与'_exit()'有不少区别在使用'fork()',特别是'vfo ...

  7. C语言exit/atexit/_exit的区别

    (1)exit/atexit头文件stdlib.h _exit头文件unistd.h (2)简单来说:exit推出程序之前会干一堆工作,比如清除内存.清理内核中各种数据结构.清除缓冲区等.但_exit ...

  8. wait()函数,自杀函数abort(),WIFEXITED WIFSIGNALED

    #include<stdio.h> #include<stdlib.h> #include <unistd.h> #include <sys/types.h& ...

  9. linux中进程退出函数:exit()和_exit()的区别

    linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...

最新文章

  1. selenium+chromedriver爬取淘宝美食信息保存到MongoDB
  2. 循环神经网络 递归神经网络_了解递归神经网络中的注意力
  3. 转载:如何在 SQL Server 中使用配置选项调整内存使用量
  4. CoreJava 笔记总结-第四章 对象与类
  5. C语言学习:malloc()函数
  6. Ubuntu安装与配置(简要)
  7. ajaxsetup获取ajax的url_跨域调用接口的方法之一:$.ajaxSetup()
  8. 关于SqlServer导入access数据库,十进制字段的精度过小的问题
  9. Docker 的使用
  10. php课后答案 唐四薪_php课后习题及答案
  11. 深入浅出设计模式---2、单例模式和观察者模式
  12. java写的exe程序反编译_【Jad】利用jdk自带的jad.exe实现批量反编译class文件
  13. 深入浅出学习CAN系列-了解CAPL编程语言
  14. 如何删除(插入)word表格下一页的空白页
  15. iPad出现问题时,如何恢复出厂设置怎么操作?
  16. 31省市数字经济“十四五”规划路线图
  17. springboot框架直接访问静态页面
  18. Linux刻录系统文件ISO到光盘
  19. 阿里实名认证Java版(详细教程)
  20. 【ECCV2020】Spatio-Temporal Graph Transformer Networks for Pedestrian Trajectory Prediction

热门文章

  1. 数据结构和算法分析:第二章 算法分析
  2. 重庆二师计算机科学与技术,应用型本科院校计算机科学与技术专业一流课程建设思考──以重庆第二师范学院为例...
  3. pycharm支持python3.8_PyCharm 2019.2 发布,Python 3.8功能的支持
  4. apache负载均衡的安装和实现方法
  5. 【Luogu】P3224永无乡(splay)
  6. esriFeatureType与esriGeometryType的区别与联系
  7. XX公司珠宝进销分销系统设计
  8. android配置文件说明
  9. 详解Adorner Layer(zz)
  10. 面试(之)三赴上海易传媒—揭秘之旅