使用__NR_in用户空间代码

时间:2014-04-04 13:35:36

标签: linux-kernel kernel header-files system-calls

我有一个代码,通过

之类的东西来检查某些系统调用的存在
#if defined(__NR_process_vm_readv)

blah blah

#else 

blah2 blah2

#endif

通过预处理器运行源文件后,我看到正在编译#else中的代码。原因是包含的unistd.h位于/usr/include下,而具有这些特定定义的unistd.h文件位于/usr/include/asm-generic/unistd.h下。那么我该如何包含它呢?我工作的代码是由第三方编写的,因此我不知道他们选择遵循的策略是否正确(依赖于这些定义)。

1 个答案:

答案 0 :(得分:1)

在linux上执行此操作的正确方法显示在syscall(2)手册页中(请参阅示例http://man7.org/linux/man-pages/man2/syscall.2.html):

#include <unistd.h>
#include <sys/syscall.h>

可能使用前面的“#define _GNU_SOURCE”或其他系统说明符,但在我的系统上似乎没有必要。 <sys/syscall.h>文件实际上包含<asm/unistd.h>。这提供了SYS_syscall定义以及__NR_syscall