Нека разгледаме системното извикване 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