标签: strerror

如何在C中打印errno的符号名称?

我可以使用perror()strerror()打印属于a的"人类可读"错误消息errno,但是如果我还要打印符号名称(例如" EAGAIN")的话errno呢?

任何方便的功能或宏来做到这一点?

更新:附上我最终编写的代码,基于下面接受的答案及其评论的想法:

#include <ctype.h>
#include <errno.h>
#include <stdio.h>

int get_errno_name(char *buf, int buf_size) {
    // Using the linux-only gawk instead of awk, because of the convenient
    // match() functionality. For Posix portability, use a different recipe...
    char cmd[] = "e=       && " // errno to be inserted here (max digits = 6)
                 "echo '#include <errno.h>' | "
                 "gcc -dM -E - | " // optionally, use …
Run Code Online (Sandbox Code Playgroud)

c printf errno strerror

8
推荐指数
2
解决办法
4697
查看次数

如何将strerror_l与当前语言环境一起使用?

我正在修复一些使用strerror(不是线程安全的)多线程的Linux代码.我发现strerror_r并且strerror_l都是线程安全的.由于不同的定义strerror_r(取决于_GNU_SOURCE它的定义不同)我想使用更新的strerror_l函数,但我应该如何获取locale_t当前语言环境的对象?我没有使用iconv或任何东西,只是简单的libc,我不知道如何获得"默认语言环境"对象(我不关心错误打印的语言,我只想要一个人类可读的字符串. )

linux posix strerror

6
推荐指数
1
解决办法
663
查看次数

嵌套列表的元素总和

我有一个名为 list_6 的嵌套列表:

[[-1, 1, -1, 1, -1, 1, 1, 0, -1, 0, -1, -1, 1, 1, 1, 0, 1, -1, -1, -1 , 1, 1, 1, 0, 0, -1, 0, 0, 0, 1, 0, -1, 1, 1, -1, 0, 0, 1, 1, -1, 0, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1],...]]

列表的每个元素包含-1,1中的整数,并且元素长度不等,列表中有20个元素

我想创建一个名为 list_7 的新列表,如下所示:

[[13],[4],[5],...]],以便对嵌套列表中的每个元素求和,并打印结果。我尝试使用 iter.zip_longest:

[sum(i) for i in itertools.zip_longest(*list_6, fillvalue=0)]

但我得到一个错误函数:

“str”对象不可调用

python sum nested-lists strerror elementwise-operations

1
推荐指数
1
解决办法
301
查看次数

为什么strcpy(strerror(errno),"Hello")没有复制"Hello",但是{ptr = strerror(errno); strcpy(ptr,"Hello");}呢?

请解释以下程序中发生的情况.

我检查了strerror(errno)程序开头和结尾返回的地址,并确认每次返回相同的地址.然后一旦确定,在第一种情况下,我继续分配相同的地址ptr,然后复制一个字符串"Hello"到它用strcpy().在案例二,我试图复制"Hello"直接通过返回的地址strerror(errno).我曾奇findings.I'll感激,如果你解释下:

在一个情况下,我复制"Hello"ptr它是成功的,因为在随后printf(),ptr打印Hello.但是,当我通过了strerror(errno),而不是ptrprintf(),它打印旧的错误message.How是有可能,ptr指向一个消息,但strerror(errno)指向另一个消息时两个地址是一样的吗?我验证了两个地址都是一样的,我希望复制"Hello"ptr应该与将它复制到返回时相同strerror(errno).为了加倍检查这个差异,然后我试着"Hello"直接复制到strerror(errno)但这次它也不起作用它打印出相同的旧错误字符串.但令人惊讶的是,在这一点上,我再次验证了地址ptr并且strerror(errno)确实一直都是相同的!怎么可能?如果它们是相同的,它们如何指向不同的字符串?"Hello"旧的自定义错误消息的一个和另一个?

请解释一下这背后的原因.

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

int main ()
{ char *ptr;
  FILE * fp;
  fp = fopen ("missingfile.txt","r");
  if (fp == NULL)
    printf ("%s\n",strerror(errno));
    printf("\n%p",strerror(errno));  //Initial address …
Run Code Online (Sandbox Code Playgroud)

c pointers strcpy string.h strerror

-1
推荐指数
1
解决办法
332
查看次数

获取recv函数返回的错误号

如何获取recv()套接字通信recv()返回的错误号或错误字符串,返回-1读取大小,这意味着发生了一些错误.我想知道错误的具体原因.所以我怎么能得到它.

c linux errno return-value strerror

-1
推荐指数
1
解决办法
2458
查看次数