9

在“The C Programming Language”一书中它说:

“库中的许多函数在发生错误或文件结束时设置状态指示符。这些指示符可以明确设置和测试。此外,整数表达式errno(在 中声明<errno.h>)可能包含一个错误编号,该编号提供有关最最近的错误。”

我在哪里可以看到这些函数的列表?

4

6 回答 6

6

该标准对以下内容进行了说明errno

errno 的值在程序启动时为零,但绝不会被任何库函数设置为零。errno 的值可以通过库函数调用设置为非零,无论是否存在错误,只要在本国际标准的函数描述中没有记录 errno 的使用。

这对我说,任何库函数都可以errno以它喜欢的任何方式随意使用,除了:

  • 它不能设置errno0
  • 如果标准明确说明,它不能做它喜欢做的事

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

因此,errno用于错误检查的程序应在库函数调用之前将其设置为零,然后在后续库函数调用之前对其进行检查。当然,库函数可以保存errnoon entry 的值,然后将其设置为零,只要errno在返回之前如果 ' 的值仍然为零,则恢复原始值。

正如其他答案中所述,对于不在标准中的功能进行设置errno也是很常见的。

于 2009-07-12T18:46:41.233 回答
5

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

于 2009-07-12T18:27:46.077 回答
1

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

于 2009-07-12T18:36:07.150 回答
0

一个适当的问题可能是这些值 errno可以获得什么以及它们各自的含义。您可以在 中看到它们intro(2)

于 2009-07-12T18:33:29.310 回答
0

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

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

于 2009-07-12T18:47:58.173 回答
-1

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

于 2009-07-12T18:33:46.000 回答