使用RHEL5评估C中的WEXITSTATUS

时间:2014-06-12 15:52:13

标签: c posix

我最近写了一个deamon,我用它来自动化各种服务器之间的数据移动,以及其他事情。我正在使用rsync,rsync正在游戏中工作。

但是,我必须在我们的一台服务器上的rsync调用中添加一个特定的排除,从那时起,我的代码在使用rsync时再也看不到成功了。我尝试手动运行rsync,每次都返回成功。此外,即使守护进程调用rsync,它也会成功复制所有文件,因此问题不在于rsync。然而,doSomeOtherThing()函数未被调用,而是我收到errorEmail3()抛出的错误电子邮件。这是在GNU C。

这是我的代码:

pid_t pid;
pid = fork();
if (pid == 0) {
  char *args[NUM_ARGS]
  args[0] = strdup("rsync");
  ...
  ...
  execvp(args[0], args);
  fprintf(stderr, "execvp ain't workin\n");
  exit(1);
}
else if (pid == -1) {
  erroremail1();
  return;
}
else {
  int childstat;
  if (waitpid(pid, &childstat, 0) == -1) {
    perror("waitpid");
    exit(1);
  }
  else {
    if (!WIFEXITED(childstat)) {
      errorEmail2();
    }
    else {
      if (WEXITSTATUS(childstat) == EXIT_SUCCESS) {
        doSomeOtherThing();
      }
      else {
        errorEmail3();
      }
    }
  }
}

我包含了sys / wait.h,以及所有其他相关的头文件。

我可能在这里遗漏了一些非常愚蠢和明显的东西,我很欣赏第二双眼睛看这个。

编辑:错误地复制了代码,已修复 编辑2:修正了另一个错字。 编辑3:添加了错误检查的确切代码

0 个答案:

没有答案