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