我需要将Linux系统调用号转换为人类可读的名称.在内核2.6.32中,我从/usr/include/asm/unistd_32.h中的__NR_*宏中提取了名称,这很糟糕但是很有效.现在我需要让它在内核3.2.0上工作,这个文件不再存在.
将Linux系统调用号映射到人类可读名称的最不便宜和最便携的方法是什么?例如1->退出,6->关闭等.
该文件<sys/syscall.h>定义了很多SYS_宏(在我的系统上间接通过bits/syscall.h)。例如:
#define SYS_eventfd __NR_eventfd
#define SYS_eventfd2 __NR_eventfd2
#define SYS_execve __NR_execve
#define SYS_exit __NR_exit
#define SYS_exit_group __NR_exit_group
#define SYS_faccessat __NR_faccessat
Run Code Online (Sandbox Code Playgroud)
这是你正在寻找的吗?我不确定这是否是您问题的一部分,但您可以这样做:
switch(code) {
#define syscode_case(x) case x: return #x;
syscode_case(SYS_eventfd);
syscode_case(SYS_eventf2);
}
Run Code Online (Sandbox Code Playgroud)
您仍然需要知道可用的宏是什么,但不需要知道实际值。
编辑:
我的来源是man 2 syscall,其中指出:
#include <sys/syscall.h>` /* For SYS_xxx definitions
Run Code Online (Sandbox Code Playgroud)