因此,我一直在浏览linux glibc源代码,但看不到它实际上在做什么。以下来自,io/chdir.c但它指示了许多源文件。这里发生了什么?显然我缺少了一些东西。秘密是什么,它在哪里进行系统调用或实际执行某项操作?
io/chdir.c
stub_warning是一些传统的疯狂。 __set_errno似乎是一个简单的宏设置errno。而且,尽管我发现有上百万种用法,weak_alias但并未在任何地方定义它。
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>
您发现的是未实现的系统的存根函数。您需要在sysdeps树下查看实际的实现。以下可能是您感兴趣的:
sysdeps
sysdeps/unix/sysv/linux
sysdeps/posix
sysdeps/i386
x86_64