为什么要使用“errno”?

2023-11-25

我是以色列理工学院计算机科学专业的学生,​​我刚刚了解到errno变量和 C 风格函数调用。 这让我想知道,如果 c 风格的系统调用使用寄存器来返回值,为什么有人应该使用errno at all?


使用的主要原因errno是提供有关错误情况的更多信息。

这在大多数(甚至是all)函数的可能返回值实际上是valid返回值。

考虑fopen()函数,它返回一个指向FILE。每个可能的返回值也是有效的返回值,除了NULL. So fopen()回报NULL失败时。但这样你就无法判断到底是什么导致了该函数失败。因此,fopen() uses errno表示确切的错误情况,即文件不存在,或者您无权读取它,或者系统内存不足,或者其他什么。

你可以想到errno作为全局变量(在线程流行之前一直如此)。如今,errno通常是一个包装返回错误条件的函数调用的宏。但这只是 C 实现线程特定全局变量的方式。

的替代方案errno不太舒服:

您可以提供一个带有指向int,并且该函数可以将其错误条件存储在那里。strtod()是这种技术的一个很好的例子。但这使得 API 更加复杂,因此不太理想。此外,它还迫使程序员定义一个新的int,如果你不关心函数是否失败,这会很烦人。

在允许多个返回值(并且不具有异常)的语言中,通常返回两个值:一个用于实际结果,另一个表示错误条件。在 Go 等语言中,您会看到如下代码:

result, ok = foo();
if (ok) {
    // handle error denoted by "ok"
}

不要相信这样声称的人errno是一种“旧”技术,因此应避免。您正在编程的机器远比errno甚至是C,而且没有人对此抱怨过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要使用“errno”? 的相关文章

随机推荐

  • 如何使用 jQuery 更改 css 类规则?

    任何人都可以帮助我吗 我的问题有两个部分 我想做的是使用 jQuery 动态更改 css 类规则 classname color red font size 14px 在上面的示例中 我有一个名为 classname现在使用 jQuery
  • 如何在 mongoDB 中对 $lookup 结果应用条件?

    参考我之前的问题 我有一个关于 lookup 的问题 并添加一些条件 您可以从下面的链接描述中获得有关问题的足够参考 Photo id 1 photo name 1 jpg photo description description 1 a
  • 如何借助 Table 组件显示 JRBeanCollectionDataSource 数据?

    我需要在表组件 JasperReports 中显示 JRBeanCollectionDataSource 数据 这是我的模板 ShowPerson jrxml 文件
  • Bootstrap 3.3.5 中无法点击 form-control-feedback 中的链接

    我正在使用链接form control feedback span从 3 1 1 开始执行 javascript 函数 我正在尝试升级到 3 3 5 但是form control feedback改变了 请参阅工作 JsFiddle 3 1
  • 如何让 pandas.read_csv 不执行任何转换?

    例如 tmp test csv 中的值 即01 02 03 旨在代表strings恰好匹配的 d 与整数相反 In 10 print open tmp test csv read A B C 01 02 03 默认情况下 pandas re
  • 有没有办法使文件输入上的本机“浏览”按钮变大跨浏览器?

    如您所知 您可以使用 hacky 方法制作自己的文件输入控件 将文件输入定位在自定义按钮上并使用opacity 0在文件输入本身上 下图显示了预期的设计 其中文件输入绝对位于浏览按钮上方 正如您所看到的 人造浏览按钮比浏览器 Firefox
  • 如何使用 JQuery 格式化货币[重复]

    这个问题在这里已经有答案了 我正在尝试使用下面的代码来格式化货币 currency keyup function e var val this val val val replace 0 9 g if val length gt 2 val
  • 如何在 Firebase 中保存位置信息

    我正在尝试将位置 纬度和经度 保存为 Firebase 中的键 字段之一 在他们的例子中SF车辆 它们确实展示了如何在存储信息后进行查询 但我的问题是如何首先保存 在他们的博客文章中 GeoFire 走向移动 他们展示了数据的样子 但我如何
  • 本地计算机上的MySQL57服务启动然后停止

    当我尝试启动 SQL Server 时 会弹出一条消息 指出它已启动 但随后停止了 这发生在我的服务器重新启动后 有谁知道我该如何解决这个问题 确保数据目录为用户 网络服务 和管理员设置了完全权限 并且如果目录中有空格 则在目录名称周围加上
  • Twitter 关注者数量

    获取纯文本形式的关注者计数的唯一方法是使用 cURL 吗 或者 Twitter API 是否提供任何此类选项 https api twitter com 1 users lookup json screen name tvdw 我的个人资料
  • 无法监听JavaFX中的KeyEvent

    我希望我的 JavaFX 程序能够响应键盘事件 我尝试将侦听器添加到 rootPane 到最上面Pane 但它不响应事件 这是我的代码 AnchorPane root new AnchorPane root setOnKeyPressed
  • C# 6 中(自动)属性初始化语法之间的差异

    C 6 中用于初始化属性的以下表达式有什么区别 1 从构造函数初始化自动属性 public class Context1 public Context1 this Items new List
  • 通过套接字传输文件,最终大小较少字节

    我正在尝试通过 C 中的套接字接收一些文件 但是服务器向我发送了 1000000 字节文件的 64 字节数据包 并且我在目标文件上获得了大约 999902 字节 while n read sd buffer in BUFSIZE BUFSI
  • 如何在非唯一列中按日期对 pandas DataFrame 条目进行分组

    一只熊猫DataFrame包含名为 date 包含非唯一的datetime价值观 我可以使用以下方法对该框架中的线条进行分组 data groupby data date 然而 这将数据分割为datetime价值观 我想按 日期 列中存储的
  • O_DIRECT 的真正含义是什么?

    如果我打开一个文件O DIRECT标志 这是否意味着每当对该文件的写入 阻塞模式 返回时 数据都在磁盘上 这个答案适用于 Linux 其他操作系统可能有不同的警告 语义 我们先从子问题开始 如果我打开带有 O DIRECT 标志的文件 是否
  • python如何解释带有前导零的数字

    我是 python 新手 我正在使用 python 2 7 当我在 python shell 上输入以下内容时 print 01 print 010 print 0100 print 01000 它给出了这个结果 1 8 64 512 我试
  • Windows Azure 中角色的静态 IP 地址?

    有谁知道是否可以在 Windows Azure 上获取 Web 或辅助角色的静态 IP 地址 可能仅在私人测试版中 几年后 Azure 现在允许您为虚拟机和云服务 Web 和辅助角色 保留 IP 地址 然而 目前只能通过 PowerShel
  • 将对象传递给 Switch Case Javascript

    我想要一个 switch case 语句来接受 Javascript 中的对象 该函数看起来像这样 const validate values gt values is an object can be accessed like so v
  • 优化 Postgres 删除孤立记录

    取下面两张表 Table public contacts Column Type Modifiers Storage Stats target Description id integer
  • 为什么要使用“errno”?

    我是以色列理工学院计算机科学专业的学生 我刚刚了解到errno变量和 C 风格函数调用 这让我想知道 如果 c 风格的系统调用使用寄存器来返回值 为什么有人应该使用errno at all 使用的主要原因errno是提供有关错误情况的更多信