一尘不染

glibc源代码中的系统调用在哪里

linux

因此,我一直在浏览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>

阅读 262

收藏
2020-06-03

共1个答案

一尘不染

您发现的是未实现的系统的存根函数。您需要在sysdeps树下查看实际的实现。以下可能是您感兴趣的:

  • sysdeps/unix/sysv/linux
  • sysdeps/posix
  • sysdeps/i386(或x86_64您的cpu拱门是什么)
2020-06-03