我有一个代码,通过
之类的东西来检查某些系统调用的存在#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
下。那么我该如何包含它呢?我工作的代码是由第三方编写的,因此我不知道他们选择遵循的策略是否正确(依赖于这些定义)。
答案 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