我们可以在函数调用后清除错误吗

can we clear errono after function call

我有一些像下面这样的函数调用,想在成功调用后打印成功,但失败了,即使函数实际上运行正常。

int myfunction() {
    // does some linux sys call for example
    int error = run_cmd ("ifconfig usb10 up");
    int syserrorno = errno; 
    strerror(syserrorno);
    return error;
}

int main(){
int error =1;
int retry = 0;
do {
    error = myfunction();
    retry++;
}
while ( error !=-1 && retry <3);
return 0;
}

基本上我尝试过:

  1. 运行 通过 myFunction 的系统调用,return error = 1 if fail or 0 if success.
  2. myFunction 中的 return 错误与 syscal 中的相同。
  3. syscal 是一个 posix 我从库中重用的 spawn 命令。
  4. 如果有错误,打印错误,重做3次。

所以我的第一个 运行 系统调用没有成功;它 returns 错误并打印出“unavailabe resources”。符合预期。

第二次成功,我查看usb10,已经启动了。但它仍然打印出相同的错误而不是成功。

有没有正确打印的方法?

使用 errno 时,请始终在调用要检查其状态的函数之前设置 errno=0;。如果 C 库和 POSIX 函数遇到错误,它们会将 errno 设置为非零值,但如果它们成功,它们 不会 将其重置为零。

(他们这样工作的原因:当通过 errno 报告的功能实际根据其他功能实现时,您不希望以后的成功让 errno 忘记一个更早的失败。这也使得用户代码可以设置 errno=0;,调用一些密切相关的库函数,并在所有这些调用之后检查整体成功或失败。)