在哪里可以看到与 errno 交互的函数列表?

问题描述 投票:0回答:7

《C 编程语言》一书中说:

“库中的许多函数在发生错误或文件结束时设置状态指示器。这些 可以明确地设置和测试指标。此外,整数表达式

errno
(声明为 在
<errno.h>
)可能包含一个错误号,提供有关最 最近的错误。”

在哪里可以看到这些功能的列表?

c++ c error-handling standard-library errno
7个回答
8
投票

标准是这么说的

errno
:

程序启动时 errno 的值为零,但任何库都不会将其设置为零 功能。 errno 的值可以通过库函数调用设置为非零,无论是否存在错误,前提是本国际标准中的函数描述中未记录 errno 的使用。

这对我来说,任何库函数都可以以任何它喜欢的方式与

errno
打交道,除了:

  • 无法将
    errno
    设置为
    0
  • 如果标准明确另有规定,它就无法做它想做的事情

请注意,该标准在脚注中建议以下内容:

因此,使用

errno
进行错误检查的程序应在库函数调用之前将其设置为零,然后在后续库函数调用之前检查它。当然,库函数可以在输入时保存
errno
的值,然后将其设置为零,只要在返回之前
errno
的值仍为零时恢复原始值即可。

正如其他答案中所述,标准之外的函数也通常会设置

errno


5
投票

您应该假设任何函数都可以设置 errno,而不仅仅是标准库中的函数。因此,列表有点毫无意义。


1
投票

如果发生错误,即函数返回-1,几乎所有 posix 库函数都可以设置 errno。 线程函数是一个例外,因为从多个线程设置一个全局错误变量将是非常危险的。成功时返回 0,否则返回错误代码(此代码与 errno 兼容,因此您可以在其上使用 strerror 和 perror 函数)。


0
投票

一个正确的问题可能是价值观是什么

errno
可以得到以及它们各自的含义。您可以在
intro(2)
中看到它们。


0
投票

@Adam,正如 Neil 所说,任何函数都可以针对 errno.h 进行编译并设置 errno。根据定义,不可能列出以这种方式编译的所有实用程序以使用核心 errno 功能。

也就是说,有多种方法可以将错误报告给用户。使用 errno 只是其中之一。


0
投票

对于 Linux,合理的近似值是引用 errno(3) 手册页的手册页列表。

例如,在此处检查“引用此页面的页面:”部分 https://man7.org/linux/man-pages/man3/errno.3.html


-2
投票

您可以使用您喜欢的编辑器和“在文件中查找...”来搜索包含

errno
关键字的文件。

© www.soinside.com 2019 - 2024. All rights reserved.