Я тестирую некоторые примеры кода книги K & R C и использует #include "syscalls.h"
в одной из своих программ, но компилятор жалуется на то, что не смог найти файл. Что мне следует заменить syscalls.h
на? Это устарело?
Что случилось с syscalls.h?
Ответ 1
Вместо этого вам следует использовать unistd.h
.
Проверьте страницу руководства для вызова, который вы пытаетесь сделать, поскольку он зависит от системы и может меняться.
Ответ 2
Попробуйте включить sys/syscall.h
.
EDIT: обратите внимание, что другие ответы, вероятно, вы действительно хотите, поскольку unistd.h
имеет обертки для большинства системных вызовов, которые вы хотите.
Ответ 3
Попробуйте включить unistd.h. Я вижу в документации, что заголовок имеет большинство системных вызовов.
Ответ 4
man syscall
также будет интересен тем, кто делает:
syscall(SYS_ble)
Manpages 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 не упоминает syscall
, поэтому это просто расширение glibc.
Стоит также отметить, что пакет 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>
.