c - GNU 中使用负 ERRNO 值的历史

标签 c linux history

有没有history behind the "negative error" approach ?也就是在很多内核代码以及各种Linux相关的项目中,都没有设置errno ,但使用 <errno.h> ,返回码的格式为:


int iErr;
if ( function_successful ) {
    iErr = 0;
} else if ( function_successful && num_bytes_handled > 0 ) {
    iErr = num_bytes_handled;
} else {
    // Error
    iErr = (-EINVAL);
}
return iErr;

我自己在编写驱动程序、资源管理器、库等时逐渐使用这种方法,但我一直想知道这种做法的起源。我个人认为这是一种处理错误号并返回 int 的函数的聪明方法。 ,并想了解更多关于它是如何以及从哪里开始的。

谢谢。

最佳答案

从历史上看,系统调用要么返回正值(如果成功),要么返回指示错误代码的负值。就我而言,从 UNIX 一开始就是这种情况。 libc 将错误返回转换为对 errno 的赋值,并在出现错误时将返回值 -1 转换为返回值,或者在成功时将返回值转换为原始返回值。

需要这种方法,因为内核无法设置 errno,因为它不知道 errno 在哪里。也许可以设计一个系统,让内核知道 errno 的位置,但这比仅仅让 libc 分配 errno 复杂得多。

关于c - GNU 中使用负 ERRNO 值的历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36845866/

相关文章:

c - int 和 signed int 声明之间的区别

c - 为 Pro Micro 编写 Windows 驱动程序

python - linux bash脚本中的模块加载命令

linux - Linux shell IF 子句中的数学表达式

linux - 为什么 ls -x 不会根据手册页文档每行生成一个条目?

android - 在长按主页按钮菜单中隐藏安卓应用程序

assembly - 为什么有这么多不同的调用约定?

c - 在 uint 中动态设置多个位

在不知道元素类型的情况下计算数值数组元素的平均值

javascript - history.back 仅当引荐来源相同的网站