-3

是否可以知道命令是否由system(cCmdInput);失败启动,并显示错误(如果是)。

cout << endl << "Enter command> ";
getline(cin, cmdInput);
try{
    cin.clear();
    const char *cCmdInput = cmdInput.c_str();
    system(cCmdInput);
}catch (...){
    cout << "An error occurred";
}
4

3 回答 3

1

首先,您不应该使用system()它,因为它存在很大的安全风险(尤其是在使用来自用户的输入时,例如上面的代码)。相反,看看exec()函数族。

但要回答你的问题,system()不会抛出任何异常。您需要检查它返回的内容。根据文档,它通常会返回您运行的命令的状态码。您需要查找您正在使用的命令的返回代码,并system()根据这些代码检查返回的值。通常,返回值 0 表示成功。

例如:

if(system(cCmdInput) != 0)
   cout << "Error" << endl;
于 2013-01-13T18:15:35.210 回答
1

system是一个 C 函数,并且不抛出异常。相反,如果执行成功,它会返回一个可用于解释的值。

根据文档_

错误时返回的值为 -1(例如 fork(2) 失败),否则返回命令的状态。

通常返回状态0表示成功。

于 2013-01-13T18:16:51.893 回答
0

实际上,在 *nix 和 Windows 中,该system函数将返回您运行的程序的进程退出代码。

因此,要运行一个表现良好的程序,只需检查结果是否为 0。按照惯例,进程退出代码 0 表示成功,任何其他值都表示失败。

但是请注意,许多 Windows 程序在生成指示错误的进程退出代码的意义上表现不佳。您可以在 Windows 命令解释器中检查这一点,最直接的是echo %errorlevel%在运行程序之后。另一种方法是使用逻辑连接词&&||,例如myprog && echo OK || echo Bah, failed!

于 2013-01-13T18:19:20.950 回答