8

Windows 和 GNU/Linux 中应用程序的常规返回值分别是什么。0 表示成功。但是应该在用户请求的中止时使用什么。当我在 Windows 上中止时,它返回 3,但如果它不是 ERROR_PATH_NOT_FOUND,则此值不在系统错误代码列表中。GNU binutils 使用 1。从用户的角度来看,返回 GetLastError 或 errno 会很好,因为它们已记录在案,但这些似乎仅涵盖较低级别的状态代码。我正在寻找一个代表“应用程序终止失败”的值

我受伤的原因是我想

exit(errcode)

来自一个信号处理程序,该处理程序在打印有关其发生位置的消息后捕获一些访问冲突/SIGSEGV(即编程错误)。那么错误代码应该可以从用户输入错误中去除。

4

2 回答 2

6

这可能会有所帮助,http ://tldp.org/LDP/abs/html/exitcodes.html这些是标准退出代码。我认为其余的都是程序相关的。基本上,您需要验证您正在寻找的特定软件的文档。正如@devnull 所说,任何不为零的退出代码都意味着不成功的终止

于 2013-08-15T15:51:56.097 回答
4

这只是关于退出代码的几个约定。让我们看看一些手册是怎么说的:

GNU C 库参考手册

  1. 对于某些程序应该返回什么样的状态值,有一些约定。最常见的约定是 0 表示成功,1 表示失败......

  2. 一般约定为特殊目的保留状态值 128 及以上

  3. 一些非 POSIX 系统对退出状态值使用不同的约定
  4. 为了获得更大的可移植性,您可以使用宏EXIT_SUCCESSEXIT_FAILURE 作为成功和失败的常规状态值。

ISO/IEC 9899:2011(C11 标准)

如果 status 的值为零EXIT_SUCCESS,则返回实现定义的状态成功终止形式。如果 status 的值为EXIT_FAILURE ,则返回状态未成功终止的实现定义形式。否则返回的状态是实现定义的。

这意味着如果您想要(并且在大多数情况下就足够了)只是指示成功或失败,您绝对应该使用EXIT_SUCCESSEXIT_FAILURE。如果你想指出其他错误,你应该重新发明你自己的退出状态。例如:

#define HEX_FILE_CREATE 2
#define HEX_FILE_CREATE 3
...

还有关于您应该返回什么以及如何返回的其他提示:

  1. 警告:不要尝试使用错误数作为退出状态。这实际上不是很有用;父进程通常不会关心发生了多少错误。更糟糕的是,它不起作用,因为状态值被截断为八位。因此,如果程序尝试报告 256 个错误,则父级将收到 0 个错误的报告——即成功
  2. 出于同样的原因,使用 errno 的值作为退出状态是行不通的——这些值可以超过 255

结论:

  1. 为了成功,请始终使用EXIT_SUCCESS
  2. 您的失败退出状态应介于 1 和 127 之间
  3. 不要使用errno错误代码作为退出状态
于 2014-01-24T09:40:59.677 回答