Linux系统编程:errno,perror,strerror

本文介绍了Linux系统编程中关于errno变量的使用,包括其在多线程环境下的改进,以及错误处理函数strerror和perror的用法。通过示例展示了如何利用这些工具来诊断和处理程序中的错误。
摘要由CSDN通过智能技术生成

 一:  errno变量

    Linux系统函数出错时通常会返回一个负值,并把整形变量errno设置为具有特定信息的值。

    errno被POSIX和ISO C定义为一个符号,它拓展成为一个可修改的整型左值。它可以是一个包含出错编号的整数,也可以是一个返回出错编号指针的函数。

    以前errno被定义成extern int errno,但这样会存在一个问题:在多线程环境中errno会被多个线程共享,当线程A调用系统函数出错时errno值会被改变,这时操作系统调度让线程B执行,线程B调用系统函数也出错,errno值再次被改变,当线程A再次被调度时去检测errno值,得到的却是错误的信息!

    现在这种情况已被改善:每个线程都有属于自己的局部errno,这样当前线程使用的errno不必担心被其他线程修改。

    errno被定义在头文件<errno.h>中。


    对于errno有两点需要注意:

    1. 如果系统函数被调用后没有出错,其值不会被例程清除。因此,仅当函数的返回值指明出错时,我们才去检验其值。

    2. 任何函数都不会把errno设置为0,而且在<errno.h>中定义的所有常量都不为0。

    综合上述两点,当使用一个无法从返回值上判断正误的的函数前最好先把errno清0,函数如果没有正确执行,则可通过errno判断哪里出现了问题。


 二:  错误处理函数

    C标准定义了两个错误处理函数,用于打印错误信息:

    1. strerror

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值