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