首页 文章

在Unix程序中退出状态约定

提问于
浏览
1

考虑一个Unix命令 foo ,该命令逐行读取文件(或 stdin ),其中每行应遵循特定格式,例如 /etc/passwd 格式 .

如果任何行不正确(但不是全部),终止状态是 EXIT_SUCCESS 还是 EXIT_FAILURE

我试过参考标准,

C11 Standard: 7.20.4.3 The exit function
Para 5

最后,控制权返回到主机环境 . 如果status的值为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式 . 如果status的值为EXIT_FAILURE,则返回状态为不成功终止的实现定义形式 . 否则返回的状态是实现定义的 .

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

2 回答

  • 1

    C标准中的术语"implementation defined"表示平台实现,而不是单个应用程序的程序员 .

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

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

  • 1

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

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

相关问题