《C 编程语言》一书中说:
“库中的许多函数在发生错误或文件结束时设置状态指示器。这些 可以明确地设置和测试指标。此外,整数表达式
(声明为 在errno
)可能包含一个错误号,提供有关最 最近的错误。”<errno.h>
在哪里可以看到这些功能的列表?
标准是这么说的
errno
:
程序启动时 errno 的值为零,但任何库都不会将其设置为零 功能。 errno 的值可以通过库函数调用设置为非零,无论是否存在错误,前提是本国际标准中的函数描述中未记录 errno 的使用。
这对我来说,任何库函数都可以以任何它喜欢的方式与
errno
打交道,除了:
errno
设置为 0
请注意,该标准在脚注中建议以下内容:
因此,使用
进行错误检查的程序应在库函数调用之前将其设置为零,然后在后续库函数调用之前检查它。当然,库函数可以在输入时保存errno
的值,然后将其设置为零,只要在返回之前errno
的值仍为零时恢复原始值即可。errno
正如其他答案中所述,标准之外的函数也通常会设置
errno
。
您应该假设任何函数都可以设置 errno,而不仅仅是标准库中的函数。因此,列表有点毫无意义。
如果发生错误,即函数返回-1,几乎所有 posix 库函数都可以设置 errno。 线程函数是一个例外,因为从多个线程设置一个全局错误变量将是非常危险的。成功时返回 0,否则返回错误代码(此代码与 errno 兼容,因此您可以在其上使用 strerror 和 perror 函数)。
一个正确的问题可能是价值观是什么
errno
可以得到以及它们各自的含义。您可以在intro(2)
中看到它们。
@Adam,正如 Neil 所说,任何函数都可以针对 errno.h 进行编译并设置 errno。根据定义,不可能列出以这种方式编译的所有实用程序以使用核心 errno 功能。
也就是说,有多种方法可以将错误报告给用户。使用 errno 只是其中之一。
对于 Linux,合理的近似值是引用 errno(3) 手册页的手册页列表。
例如,在此处检查“引用此页面的页面:”部分 https://man7.org/linux/man-pages/man3/errno.3.html
您可以使用您喜欢的编辑器和“在文件中查找...”来搜索包含
errno
关键字的文件。