Linux kernel 在用户空间代码中使用

Linux kernel 在用户空间代码中使用,linux-kernel,kernel,header-files,system-calls,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下。那我该怎么把它包括进去呢?我正在工作的代码是由第三方编写

我有一个代码,可以通过以下方式检查某些系统调用的存在

#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
下。那我该怎么把它包括进去呢?我正在工作的代码是由第三方编写的,所以我不知道他们选择遵循的策略是否正确(取决于这些定义)

在linux上执行此操作的正确方法显示在syscall(2)手册页面中(参见示例):

#包括
#包括
可能使用前面的“#define"GNU"SOURCE”或其他系统说明符,尽管在我的系统上似乎不需要这样做。
文件实际上包括
。这提供了SYS_syscall定义以及_NR_syscall

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