zoukankan      html  css  js  c++  java
  • Linux C语言错误处理

    <stdio.h>中定义了perror(),perror是在标准输出上输出msg字符串,然后再后面加上:错误语段(这个错误语段对应这时的errno)

    <string.h>中定义了strerror(),strerror是把一个错误numb作为参数,然后返回错误numb所对应的错误语段,一般用errno。

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <string.h>
    #include <errno.h>
    
    int main(int argc, char* argv[])
    {
    int i=open("/usr/src/s.t",0);
    perror(argv[0]);
    printf(strerror(errno));
    return 0;
    }
    
    执行结果:
    ]$./test 
    ./test: No such file or directory
    No such file or directory

        <assert.h>中支持assert()函数,注意,assert()检查发现条件不成立时调用abort()终止程序执行,应用程序没有机会做清除工作。assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

        C标准定义了__LINE__和__FILE__宏,GNU C扩展中定义了__FUNCTION__宏,可以用来实现代码跟踪调试。这是三个非常有用的全局变量,当程序需要输出一些内容,而又想知道输出的内容是在哪里输出的时候,这几个全局变量就派上用场了。__FILE__,__FUNCTION__, __LINE__ 从名字可以直接看出来了,对应的:代码文件名, 函数名, 行号。

        <errno.h>中定义了errno,注意没有函数会将errno清零,所以在调用可能设置errno的函数之前先将errno清零。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。所以经常char *strerror(int errno)将错误代码转换为字符串错误信息,可以将该字符串和其它的信息组合输出到用户界面。

        <stdlib.h>中定义了abort()、exit()和atexit()函数。

        函数abort()将导致程序异常终止,在终止前程序没有机会执行atexit()登记的函数,也没有计划执行一些常规的清除工作。同时,abort()还会产生core dump,如果没有ulimit限制的话。

        函数exit()和abort()类似,但它在完成清理工作之后才终止程序。

        函数atexit()登记在程序正常终止时要调用的函数。

        <syslog.h>中定义了syslogd的接口,常用于系统日志。

  • 相关阅读:
    三星S11首曝光/2019款iPhone预测价格出炉
    聊聊我用过的电纸书
    阿里云VOD 视频点播(三),后台java接口代码
    阿里云VOD 视频点播(二)、VUE视频上传,视频播放
    阿里云VOD 视频点播(一)、nuxt视频上传,视频播放
    大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7
    杂谈——怎么给CSDN博客加上目录(很详细但是很简单)
    分布式入门之1:Lease机制
    分布式入门之1:Lease机制
    分布式入门之1:Lease机制
  • 原文地址:https://www.cnblogs.com/feisky/p/1604686.html
Copyright © 2011-2022 走看看