因此,我查看了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>
发布于 2011-06-29 12:06:28
在glibc
支持的大多数系统上,chdir()
的实际系统调用代码都是由script make-syscalls.sh
自动生成的。这就是你在源码树中找不到它的原因。
https://stackoverflow.com/questions/6515583
复制相似问题