我们可以在函数调用后清除错误吗
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;
}
基本上我尝试过:
- 运行 通过 myFunction 的系统调用,return error = 1 if fail or 0 if success.
- myFunction 中的 return 错误与 syscal 中的相同。
- syscal 是一个 posix 我从库中重用的 spawn 命令。
- 如果有错误,打印错误,重做3次。
所以我的第一个 运行 系统调用没有成功;它 returns 错误并打印出“unavailabe resources”。符合预期。
第二次成功,我查看usb10,已经启动了。但它仍然打印出相同的错误而不是成功。
有没有正确打印的方法?
使用 errno
时,请始终在调用要检查其状态的函数之前设置 errno=0;
。如果 C 库和 POSIX 函数遇到错误,它们会将 errno
设置为非零值,但如果它们成功,它们 不会 将其重置为零。
(他们这样工作的原因:当通过 errno
报告的功能实际根据其他功能实现时,您不希望以后的成功让 errno
忘记一个更早的失败。这也使得用户代码可以设置 errno=0;
,调用一些密切相关的库函数,并在所有这些调用之后检查整体成功或失败。)
我有一些像下面这样的函数调用,想在成功调用后打印成功,但失败了,即使函数实际上运行正常。
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;
}
基本上我尝试过:
- 运行 通过 myFunction 的系统调用,return error = 1 if fail or 0 if success.
- myFunction 中的 return 错误与 syscal 中的相同。
- syscal 是一个 posix 我从库中重用的 spawn 命令。
- 如果有错误,打印错误,重做3次。
所以我的第一个 运行 系统调用没有成功;它 returns 错误并打印出“unavailabe resources”。符合预期。
第二次成功,我查看usb10,已经启动了。但它仍然打印出相同的错误而不是成功。
有没有正确打印的方法?
使用 errno
时,请始终在调用要检查其状态的函数之前设置 errno=0;
。如果 C 库和 POSIX 函数遇到错误,它们会将 errno
设置为非零值,但如果它们成功,它们 不会 将其重置为零。
(他们这样工作的原因:当通过 errno
报告的功能实际根据其他功能实现时,您不希望以后的成功让 errno
忘记一个更早的失败。这也使得用户代码可以设置 errno=0;
,调用一些密切相关的库函数,并在所有这些调用之后检查整体成功或失败。)