背景
errno在C、C++开发中,大家用得很多,但是稍不留神就可能出错。下面总结几个常见的问题。
注意点
- 全局的吗?
标准的errno是每个线程独享的 -
何时更新?
在系统调用和少数几个用户库函数里可能会更新 -
如何使用?
如果系统调用返回出错,读取errno, 据此分析原因;
如果系统调用返回正常,不用读取errno; -
用的时候注意事项有哪些?
使用某个系统调用返回的errno的时候,需要遵循下面的步骤:
- 采样: 就是在上述的系统调用之后的errno立即保存给局部变量(比如saved_errno);
- 使用:通常可能打印这个errno:那么千万不能直接打印errno, 而应该打印 saved_errno。 因为打印函数是系统调用,它打印的是这个系统调用更新后的errno.
- 不要在函数之间希望用errno传递值。
参考
man errno