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