syscalls.h发生了什么事?

时间:2011-09-11 19:10:33

标签: c

我正在测试K& R C书的一些代码示例,它在其中一个程序中使用#include "syscalls.h",但编译器抱怨无法找到该文件。我应该用syscalls.h替换什么?它被弃用了吗?

5 个答案:

答案 0 :(得分:9)

您应该使用unistd.h代替。 检查您正在尝试进行的呼叫的手册页,因为它取决于系统,可能会有所不同。

答案 1 :(得分:3)

尝试加入sys/syscall.h

编辑:注意其他答案可能就是你真正想要的,因为unistd.h包含你想要的大多数系统调用的包装。

答案 2 :(得分:2)

尝试加入unistd.h。我在文档中看到标题包含大部分系统调用。

答案 3 :(得分:1)

man syscall也将吸引那些从事以下活动的人:

syscall(SYS_ble)

手册页4.04说:

   #define _GNU_SOURCE         /* See feature_test_macros(7) */
   #include <unistd.h>
   #include <sys/syscall.h>   /* For SYS_xxx definitions */

   long syscall(long number, ...);
     

系统调用编号的符号常量可以在头文件<sys/syscall.h>中找到。

因此在glibc中,您需要:

  • unistd.h用于syscall函数
  • sys/syscall.h用于SYS_

POSIX 7 does not mention syscall,所以它只是一个glibc extension

还值得注意的是,Ubuntu 16.04软件包libc6-dev 2.23兼有:

/usr/include/syscall.h
/usr/include/sys/syscall.h

其中第一个仅包含:

#include <sys/syscall.h>

因此允许您仅在代码中使用:

#include <syscall.h>

但是我根本找不到记录在哪里,所以我建议您只使用记录在案的#include <sys/syscall.h>

答案 4 :(得分:0)

只需使用#include <sys/syscall.h>即可。

您使用哪个编译器?