在Unix程序中退出状态约定

时间:2016-06-24 12:33:53

标签: unix return posix return-value c11

考虑一个Unix命令foo,它逐行读取文件(或stdin),其中每一行都应遵循特定的格式,例如{{ 1}}格式。

如果任何行不正确(但不是全部),终止状态应为/etc/passwd还是EXIT_SUCCESS

我试过参考标准,

C11 Standard: 7.20.4.3 EXIT_FAILURE功能
第5段

  

最后,控制权返回给主机环境。如果status的值为零或   exit,状态成功终止的实现定义形式   回。如果状态值为EXIT_SUCCESS,则为实现定义形式   返回状态不成功的终止。否则返回的状态是   实施德音响定义

我对上述内容的解释是“实现定义”意味着决定留给实施者。这种解释是否正确?

2 个答案:

答案 0 :(得分:1)

你是正确的,决定由实施者决定。这取决于程序的使用方式。

例如,如果foo在遇到格式错误的输入时因失败而终止,则foo的用户可以编写一个shell脚本来检查其退出状态,并通过包含该内容的电子邮件向她发出警报stderr。如果foo成功终止,则无需发送电子邮件。

答案 1 :(得分:1)

C标准中的“实现定义”一词是指平台实现,不是单个应用程序的程序员。

这句话的意思是不同的平台可以对成功或失败如何传递到环境(例如shell)有不同的约定。实现还可以提供用于区分不同代码的失败的手段,这取决于导致它的原因。但是,这些代码可能无法在不同系统之间移植。

对于您作为程序员认为成功或失败的语义,您可以完全自由地为您的应用程序做任何适当的事情。