首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么系统调用返回-1而不是实际的错误代码?

为什么系统调用返回-1而不是实际的错误代码?
EN

Stack Overflow用户
提问于 2020-06-02 14:52:42
回答 2查看 208关注 0票数 0

在其中一门课程中,我正在学习Linux内核。我知道C库在错误时返回-1,并将errno变量设置为实际错误。下面是讲稿,上面写着同样的内容。

我的问题是,为什么C库不能直接返回返回代码而不是返回-1

Note:这个问题可能与this one重复。但是参考问题回答,我的问题更多的是与为什么有关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-03 18:15:05

摘要:C本身并不知道到底出了什么问题,它只是知道出了什么问题。因此,为了维护通用标准,它只返回-1作为通知调用者错误发生的信号,现在由调用方检查errno到底是什么。

简要解释:,原因是内核返回的所有errno都在内核本身中定义。

C只是一种通用编程语言,它从内核接收errno并根据它设置变量并返回-1作为指示错误或失败的信号。所以C语言本身并不知道到底出了什么问题,它只是从内核的注册错误处理程序那里接收到一个错误发生的信号,然后这个错误处理程序提供了实际的错误代码。

因此,为了保持泛型性质,C只是返回-1。这在其他场景中很有用,假设您将C用于其他目的,比如嵌入式系统开发。现在,有几个错误代码与Linux内核错误代码不同。那么,如果嵌入式系统出现问题,C如何知道返回哪些错误代码呢?

答案是C实际上不知道出了什么问题。系统的注册错误处理程序将向您的C程序发送错误信号,并给出相应的错误代码,C将返回-1并设置errno。

现在,为什么C不能返回Errno:的答案是维护通用设计。这使得C开发人员不太关心错误信号的返回类型。如果您正确地解释了C程序返回的-1,那么C程序返回的只是调用C程序的userland或shell脚本的一个通用信号,如果调用C程序的人需要知道到底出了什么问题,他们可以检查errno变量。

票数 1
EN

Stack Overflow用户

发布于 2020-06-03 11:34:52

我认为有一些可能的原因。

首先,这种设计在C/C++中是正常的,我们得到了一个成功/失败的返回,如果你想得到详细的错误信息,你可以得到它。这使得返回更多的统一的,并成为一种正常的使用方式。更重要的是,也许有一段时间你只需要检查一个函数是否工作,你就不需要得到答案。

第二,这可能是历史遗留下来的设计。C/C++有很多旧的设计,我们仍然保留它们的原因是因为更改的成本太大,如果我们不改变它,我们就不会有任何错误。

我不确定我的答案是完全正确的,它们只是一些可能的原因,可能对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62154841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档