Что случилось с syscalls.h?

Я тестирую некоторые примеры кода книги K & R C и использует #include "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>.