背景

errno在C、C++开发中,大家用得很多,但是稍不留神就可能出错。下面总结几个常见的问题。

注意点

  • 全局的吗?
    标准的errno是每个线程独享的
  • 何时更新?
    在系统调用和少数几个用户库函数里可能会更新

  • 如何使用?
    如果系统调用返回出错,读取errno, 据此分析原因;
    如果系统调用返回正常,不用读取errno;

  • 用的时候注意事项有哪些?
    使用某个系统调用返回的errno的时候,需要遵循下面的步骤:

  1. 采样: 就是在上述的系统调用之后的errno立即保存给局部变量(比如saved_errno);
  2. 使用:通常可能打印这个errno:那么千万不能直接打印errno, 而应该打印 saved_errno。 因为打印函数是系统调用,它打印的是这个系统调用更新后的errno.
  3. 不要在函数之间希望用errno传递值。

参考

man errno