Итак, я просмотрел исходный код linux glibc и не вижу, где он на самом деле что-то делает. Следующее взято из io / chdir.c
, но указывает на многие из исходных файлов. Что тут происходит? Очевидно, я чего-то упускаю. В чем секрет, где он выполняет системный вызов или на самом деле что-то делает?
stub_warning
- это какое-то унаследованное безумие. __ set_errno
кажется простым макросом, который устанавливает errno
. И хотя я нахожу миллион случаев использования weak_alias
, я нигде не вижу его определения.
Есть ли где-нибудь полезное руководство для понимания того, как работает glibc?
#include <errno.h>
#include <stddef.h>
#include <unistd.h>
/* Change the current directory to PATH. */
int
__chdir (path)
const char *path;
{
if (path == NULL)
{
__set_errno (EINVAL);
return -1;
}
__set_errno (ENOSYS);
return -1;
}
stub_warning (chdir)
weak_alias (__chdir, chdir)
#include <stub-tag.h>