一、errno的由来
在C编程中,errno是个不可缺少的变量,特别是在网络编程中。如果你没有用过errno,那只能说明你的程序不够健壮。当然,如果你是WIN32平台的GetLastError(),效果也是一样的。
为什么会使用errno呢?个人认为,这是系统库设计中的一个无奈之举,他更多的是个技巧,而不是架构上的需要。我们观察下函数结构,可以发现,函数的参数返回值只有一个,这个返回值一般可以携带错误信息,比如负数表示错误,而正数表述正确的返回值,比如recv函数。但是对于一些返回指针的函数,如: char *get_str();这个方法显然没有用的。NULL可以表示发生错误,但是发生什么错误却毫无办法。于是,errno就诞生了。全局变量errno可以存放错误原因,当错误发生时,函数的返回值是可以通过非法值来提示错误的发生。
二、errno的线程安全
errno是全局变量,但是在多线程环境下,就会变得很恐怖。当你调用一个函数时,发现这个函数发生了错误,但当你使用错误原因时,他却变成了另外一个线程的错误提示。想想就会觉得是件可怕的事情。
多线程中的errno原理详解/errno的线程安全
最新推荐文章于 2022-12-24 21:37:24 发布
本文详细介绍了C编程中的errno变量,其作为错误信息的载体,特别是在多线程环境中。文章讨论了errno的由来,指出其在单返回值函数中传递错误信息的作用。接着,探讨了errno在多线程中的线程安全问题,GCC如何通过线程局部变量解决这个问题。最后,作者分享了errno的实现方式及在实际应用中的扩展,包括自定义错误编码的方法。
摘要由CSDN通过智能技术生成