что случилось с syscalls.h? - PullRequest
       2

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

13 голосов
/ 11 сентября 2011

Я тестирую несколько примеров кода книги K & R C, и она использует #include "syscalls.h" в одной из своих программ, но компилятор жалуется на невозможность найти файл.Чем заменить syscalls.h на?Это устарело?

Ответы [ 4 ]

9 голосов
/ 11 сентября 2011

Вы, вероятно, должны использовать unistd.h вместо этого.Проверьте справочную страницу для вызова, который вы пытаетесь сделать, поскольку он зависит от системы и может варьироваться.

3 голосов
/ 11 сентября 2011

Попробуйте включить sys/syscall.h.

РЕДАКТИРОВАТЬ: обратите внимание, что другие ответы, вероятно, то, что вы действительно хотите, так как unistd.h имеет оболочки для большинства системных вызовов, которые вы хотите.

2 голосов
/ 11 сентября 2011

Попробуйте включить unistd.h . Я вижу в документации, что в заголовке содержится большинство системных вызовов.

1 голос

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>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...