В качестве примера рассмотрим системный вызов gettid
:
http://man7.org/linux/man-pages/man2/gettid.2.html
Я знаю, что gettid
не реализован в libc, и мне нужно сделать системный вызов напрямую, чтобы использовать его (syscall(SYS_gettid)
). Я проверил это сам с помощью этого кода C:
#include <stdio.h>
#include <sys/types.h>
int main(){
pid_t a = gettid();
return 0;
}
который не связывается и выдает это предупреждение при компиляции: warning: implicit declaration of function 'gettid'; did you mean 'getline'
.
Теперь мой вопрос: почему документация Linux задокументировала это так, как будто эта функция действительно существует?
SYNOPSIS
#include <sys/types.h>
pid_t gettid(void);
У них нет примера того, как сделать прямой системный вызов, и вместо этого у них есть приведенный выше фрагмент кода, которого не существует и который нельзя использовать. Есть что-то, что мне не хватает?
syscall()
), которые должны были использоваться вместо этого в более ранних версиях. Так что именно вы спрашиваете? - person John Bollinger   schedule 31.08.2019syscall()
. Они действительно не являются частью ядра, и их доступность действительно зависит от системных библиотек. - person John Bollinger   schedule 31.08.2019