C中的所有系统调用是否都将-1关联为其错误代码?

C中的所有系统调用是否都将-1关联为其错误代码?,c,posix,C,Posix,例如,int fork在出错时返回-1int pipe在出错时也返回-1int socket在出错时也返回-1 我想知道,是否所有系统调用都在出错时返回-1。我见过有错误检查的代码,这完全不同。其中一些执行返回值

例如,
int fork
在出错时返回
-1
int pipe
在出错时也返回
-1
int socket
在出错时也返回
-1

我想知道,是否所有系统调用都在出错时返回
-1
。我见过有错误检查的代码,这完全不同。其中一些执行
返回值<0
,一些执行
返回值==-1
,一些执行
返回值<1
,因此,如何执行错误检查任何系统调用

我必须检查什么?或者它实际上取决于系统调用吗?我不能总是这样做吗

如何检查任何系统调用的错误

如果不阅读该特定系统调用的文档,则无法执行此操作。没有统一的惯例

如果将有效ID定义为始终为非负,则对于返回某种ID(进程ID、文件描述符等)的对象,通常使用
-1

我想知道,所有系统调用在出错时是否返回-1

没有。在没有提供任何实际例子的情况下,我引述:

大多数函数都可以提供错误号。每种方法 函数提供其描述中指定的错误号

某些函数在通过访问的变量中提供错误号 符号
errno
[…]

有些函数直接返回一个错误号作为函数值。 这些函数返回的值为零表示成功

通过
errno
提供错误详细信息的函数也通过其返回值发出发生(未指定)错误的信号。大多数此类信号的返回值为-1

你接着问:

我看过代码 通过错误检查,一切都不同了。其中一些确实返回了

值<0
,其中一些执行
返回值==-1
,一些执行
返回
值<1
,那么,我可以做什么来检查任何系统调用的错误

许多通过返回-1表示错误的函数不记录任何其他负返回值。对于此类函数,测试返回值是否正好为-1和测试返回值是否为负值具有相同的用途。根据1测试返回值并不等同,但它可能仍然适用于某些特定上下文,例如,当它用于检测函数失败和函数成功时,尽管如此,这表明存在应用程序级错误,例如用户输入错误


正如引用的文本所示,每个函数都记录了它发出错误信号的机制,以及如何获得相应的错误号(如果有)。您可以通过选择与文档一致的任何方法来检查特定函数的错误。POSIX在这方面包含两大类函数——一类是通过返回-1来发出错误信号的函数,另一类是通过返回各种非零值来发出错误信号的函数——但有时还需要处理其他函数。如果不确定,最好查阅所使用函数的文档。

fork()、
pipe()
、和
socket()
函数不是C标准库的一部分,尽管它们是由POSIX标准化的。那么你是在问POSIX吗?我说的是
CLinux
一般来说,非零意味着某种错误。但是,您需要参考每个单独函数的文档,以了解如何进一步解释它……除非使用零表示错误,而非零表示成功结果。。。。或者当任何非负返回值指示(某种程度的)成功时。由于POSIX合并并扩展了C99,我们可以以
fscanf()
为例。回答得好。例如,是一个不能失败的功能;返回设置了
errno
的-1;如果成功,则返回0,否则返回错误号(属于
errno
集合);如果成功,则返回0,否则返回
EAI\uu
错误代码。