C中未使用的退货状态代码

时间:2010-09-07 12:08:02

标签: c operating-system exec

我想基于子代码的执行,将一个唯一的状态代码从子进程通过exit()返回给等待的父进程。如果execvp失败,则使用exit()。我假设如果execvp成功,执行的命令将发送其状态代码。

pid=fork();
if(pid==0)
{
    if(execvp(cmdName,cmdArgs)==-1)
    {
         printf("Exec failed!\n");
         exit(K);   //K?
    }
}
waitpid(pid,&status,0);

假设传递给execvp()的命令是“ls”,手册页说它可能返回0(成功),1或2(失败)。

我可以使用什么安全唯一值K来指示子进程的返回状态,它不会与execvp()执行的命令返回的任何值冲突?

3 个答案:

答案 0 :(得分:7)

由于显而易见的原因,K不会有任何永远不会与任何其他程序的返回状态冲突的K值。

证明:假设有这样的K,你自己打电话给你的程序......

答案 1 :(得分:1)

没有安全的唯一值,因为每个程序选择的返回值只有有限的数量。

您必须记录您的程序并说出它返回的内容,并提供某种形式的日志以提供更多详细信息。

答案 2 :(得分:0)

我相信大于127的任何东西(或者,如果使用有符号字节,则为负数)是为OS(在Unix上)保留的,用于报告段错误,奇偶校验错误等(由于信号处理程序和其他一些事情而导致的任何退出)。您可以使用的所有其他退出代码。

更新:找到了Linux的链接:http://www.tldp.org/LDP/abs/html/exitcodes.html