为什么不给人们不同的标题呢?
他们已经有了它们;标题被按主题分成文件,所以需要另一个维度来过滤。
我正在寻找信号数字到名称的转换。我在<string.h>
中找到了strsignal()
。手册上说:
sigabbrev_np(), sigdescr_np():
_GNU_SOURCE <<< not default
strsignal():
From glibc 2.10 to 2.31:
_POSIX_C_SOURCE >= 200809L <<< default, cf. XOPEN2K8 below
Before glibc 2.10:
_GNU_SOURCE
我从来没有真正关心过这一部分。
sigabbrev_np()
不包含在默认的“特性”中。
string.h
显示如何:
#ifdef __USE_XOPEN2K8
extern char *strsignal (int __sig) __THROW;
# ifdef __USE_GNU
extern const char *sigabbrev_np (int __sig) __THROW;
extern const char *sigdescr_np (int __sig) __THROW;
# endif
__USE_GNU
可以/应该通过编译或文件顶部的 _GNU_SOURCE
设置。但是这也会“激活”所有其他头文件中的 ifdeffed 声明。(除非您按头文件定义-取消定义)
因此,为了明确地导入仅一个(或另一个)特殊函数,我现在这样做(复制粘贴。我留下了 "THROW" 并更改了 "__sig"):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
extern const char *sigabbrev_np(int sig) __THROW;
#include <errno.h>
#include <elf.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
...
现在使用sigabbrev_np(wstate >> 8)
可以给我提供TRAP
等内容,而无需使用#define。
我曾经花费很长时间才意识到0x57f
表示OK,因为5
是TRAP
,但0xb7f
和0x77f
分别是SEGV
和BUS
--- 这取决于我设置断点的位置,有时需要执行数千条指令。因为我没有回退指令指针...
_GNU_SOURCE
的真正原因是为了使用strfry
和memfrob
。 - user4815162342_FILE_OFFSET_BITS
,而不是_GNU_SOURCE
。 - R.. GitHub STOP HELPING ICE