2

我正在尝试将一些错误警报编码到我公司的一个监控程序中,但是对于 C 中 system() 命令的返回值,我没有太多运气。代码调用 scp 事务来拉取文件另一台服务器.....如果系统关闭或连接失败,我需要它来标记错误。

我试过用“echo $?”确定错误返回值是什么?看起来 0 是成功返回,然后 1 代表其他任何东西,但即使将其编码到应用程序中,它也不会出现失败的尝试。我刚刚尝试从命令行获取返回值,但我不知道该值是否实际上是应用程序执行期间返回的值。

当 system() 命令返回失败时,底线是捕捉,所以我不确定是否有更好的解决方案。

谢谢大家。

编辑:这是我用来识别错误的代码摘录:

if ( system(cmd) != 0 ); 
{
  sftpCrash = TRUE;
  printf("FTP crash detected.")
  return;
}

然后 int sftpCrash 被返回给调用函数,并像这样执行:

if ( sftpCrash == TRUE)
{
  Node->color = RED; //Posts an error to our monitoring application
  sprintf(reason, "Failure on SFTP connection to %s. Please check server status.",    
  getenv("HOSTNAME"));
  printf(("SFTP crashed. Should post error alert."));
}

这一切都在 UNIX 服务器上运行和执行。

4

1 回答 1

2

的返回值system()作为返回状态的一部分传递。用于WEXITSTATUS(status)检索它:

int status = system("my command");
if (status != -1) { // -1 means an error with the call itself
    int ret = WEXITSTATUS(status);
    ...
}
于 2013-06-26T14:12:40.620 回答