相关疑难解决方法(0)

如何在c中将枚举名称转换为字符串

是否有可能将枚举器名称转换为C中的字符串?

c string enums

82
推荐指数
5
解决办法
9万
查看次数

将POSIX整数errno转换为编译时常数

偶尔(例如使用stracegdb等等)人们会发现一个POSIX调用集errno是一个整数值,而一个人想知道编译时间C常数(更准确地是由预处理器定义)来检查它(例如ECHILD)-参见例如等待子进程的pid没有成功

上面链接的问题中的EG,在10中返回了整数错误号errno。我想从那儿回到琴弦上ECHILD。不给我什么perrorstrerror给我什么(“没有子进程”或类似的东西)。

这是这样做的明显方法,该方法不起作用:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main (int argc, char **argv)
{
  printf ("%s\n", strerror (10));
  exit (0);
}
Run Code Online (Sandbox Code Playgroud)

打印输出:

No child processes
Run Code Online (Sandbox Code Playgroud)

不是ECHILD,因此不执行所需的操作。

有什么比手动grep完成更简单的方法/usr/include吗?

您可能认为重复的事物,但并非如此:

适当的答案可能涉及一些魔术,以预处理的适当部分/usr/include并显示E以适当值开头的任何常数。

c posix errno

7
推荐指数
2
解决办法
614
查看次数

如何检查errno的值?

我正在使用系统调用,如果失败,我需要为不同的errnos做不同的事情.

我需要编写看起来像这样的代码:

int res;
res = systemCall();
if (res == -1)
{
    if (errno == ENOMSG)
    {
        doSomething();
    }
    else
    {
        doSomethingElse();
    }
}
Run Code Online (Sandbox Code Playgroud)

perror没有帮助,因为它只打印值.

至于strerro - 如果它是我需要的,我不是如何使用它,因为在这里它说实际的字符串与错误不同.从手册页引用:"(例如,如果errnum是EINVAL,则返回的描述将是"Invalid argument")".

我正在使用Linux.系统调用:msgsend和msgrcv(https://linux.die.net/man/2/msgrcv).我不确定你问的C库是什么.

我看到我没有很好地解释自己.

语句if(errno == ENOMSG)是否有效?是否有这样的变量errno?基本上我的问题是:if为了测试errno ,在声明中应该怎么做?

c errno system-calls

7
推荐指数
3
解决办法
3万
查看次数

标签 统计

c ×3

errno ×2

enums ×1

posix ×1

string ×1

system-calls ×1