【发布时间】:2018-02-11 07:07:20
【问题描述】:
我正在使用系统调用,如果它失败,我需要为不同的错误做不同的事情。
我需要编写如下所示的代码:
int res;
res = systemCall();
if (res == -1)
{
if (errno == ENOMSG)
{
doSomething();
}
else
{
doSomethingElse();
}
}
perror 没有帮助,因为它只打印值。
至于 strerro - 如果它是我需要的,我不知道如何使用它,因为 here 它表示实际字符串与错误不同。从手册页引用:“(例如,如果 errnum 为 EINVAL,则返回的描述将为“无效参数”)。
我正在使用 Linux。 系统调用:msgsend 和 msgrcv (https://linux.die.net/man/2/msgrcv)。我不确定你问的是什么 C 库。
我明白我没有很好地解释自己。
if (errno == ENOMSG) 语句有效吗?有没有这样的变量errno?基本上我的问题是:为了测试 errno,if 语句中应该包含什么内容?
【问题讨论】:
-
在什么操作系统上?什么确切的系统调用?什么C库?请编辑您的问题以改进它
-
每个系统调用都有一个可能的 errno 值列表(参见它的
man页面),这会让你知道你应该测试什么。 -
你写的很好。请记住,没有库函数将
errno设置为零,除非函数指示错误并且记录为设置errno,否则不应对其进行测试。请注意,许多 pthreads 函数不设置errno,例如;他们改为返回错误号。此外,即使成功,函数也可以将errno设置为非零值。例如,在 Solaris 上,如果标准输出不是终端,即使printf()调用成功,errno也可以设置为 ENOTTY。
标签: c system-calls errno