【问题标题】:how to check system() result如何检查 system() 结果
【发布时间】:2012-01-20 13:42:56
【问题描述】:

我应该如何检查系统命令是否成功运行并且没有返回错误? 根据MSDN Library,有多种情况。我无法确定以下 sn-p 是否正确。

char buffer[100];
int ret_val;
strcpy(buffer, "copy *.txt ");
strcat(buffer, path);
ret_val = system(buffer);
if(0 != ret_val)
{
  perror("There was an error");
}
else
{
  printf("The command was run successfully.");
}

返回值

如果 command 为 NULL 并且找到了命令解释器,则返回一个非零值。如果未找到命令解释器,则返回 0 并将 errno 设置为 ENOENT。如果 command 不为 NULL,则系统返回命令解释器返回的值。仅当命令解释器返回值 0 时才返回值 0。返回值 – 1 表示错误,errno 设置为以下值之一:

【问题讨论】:

标签: c++ c windows system


【解决方案1】:

要捕获所有案例,您还需要检查errno,如文档所述:

if (ret_val == 0 && errno == 0)
{
  printf("success!\n");
}

确保您在致电system() 之前也清除 errno

【讨论】:

  • 它并没有真正起作用。我按照您的建议放置了一个无法删除和运行的文件。在 Visual Studio 2008 的自动窗口中,我看到“_errno 返回 0x00400808”。但它也进入了这个 if 语句。 :(
  • man 3 system 说: RETURN VALUE 错误时返回的值为-1(例如fork() 失败),否则返回命令的状态。后一种返回状态采用 wait(2) 中指定的格式。因此,该命令的退出代码将是 WEXITSTATUS(status)。如果 /bin/sh 无法执行,退出状态将是执行 exit(127) 的命令的状态。
  • @Pete Wilson 和 Windows?
  • @mustafa -- 打败我。谷歌为你带来了什么?你在 msdn 上发现了什么?
【解决方案2】:

由于system 的参数不为NULL,因此您专注于这种情况,这是一个非常简单的情况:-1system 函数失败,否则实际命令的返回码。

【讨论】:

  • 我看到system 在某些情况下会返回1
  • 是的,它可能是。我创建了一个无法删除的文件。在控制台上它输出“该进程无法访问该文件,因为它正在被另一个进程使用。”但system 仍在返回0
猜你喜欢
  • 2020-10-29
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多