【问题标题】:Where is the C library wrapper function of fopen written?fopen的C库包装函数写在哪里?
【发布时间】:2015-09-19 18:25:57
【问题描述】:

我想知道当编译器在 C 程序中遇到“fopen()”时会发生什么。 调用“开放”系统调用的函数在哪里? 我看到 fopen() 是在 stdio.h 中声明的,但我找不到它的实现位置!! 我想看看系统调用号和其他系统调用参数写入CPU寄存器的位置。

谢谢。

【问题讨论】:

  • 它在您的标准库中实现。你用的是什么系统和编译器?
  • 这取决于您的平台。 glibc 很常见,但还有很多其他的。
  • 我在 linux kernel 4.0.9 上使用 gcc
  • 下载 glibc 源码并阅读。不过,这不是一件容易的事。
  • 内核在这里不是特别相关:这是一个用户空间库,有许多可能的选择供发行版使用。事实上,一些发行版提供了一种选择。

标签: c system-calls


【解决方案1】:

您可以在此处查看glibc 的实现:https://sourceware.org/git/?p=glibc.git;a=blob;f=libio/iofopen.c;h=be2bbb663bc04093493313af266fcdad85c62c28;hb=HEAD#l95

_IO_new_fopen 是扩展为fopen 的符号常量(宏)fopen 函数是libio 函数的内部函数的包装器。

fopen 不是 system 调用,您可能会将其与系统调用 open 混淆。

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多