有没有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/