0

有时,我想知道 ac 函数的实现。我的编辑器是 vim。我尝试过 ctags 和 cscope 以及 man。

man 2|3 只告诉我如何使用一个函数。

ctags 和 cscope 都只能找到一些函数的实现。

他们都找不到一些功能。特别是一些系统功能(调用)。

如果一个函数可以通过包含一些头文件来使用,有什么方法可以轻松找到一个函数的实现,

4

2 回答 2

2

您将无法绕过提供函数实现的模块的源代码。

对于 Linux,大多数使用的模块都是开源的,因此应该可以访问源代码。

从哪里获取源代码取决于库和/或正在使用的发行版。这包括内核。

有些发行版可能包括所有来源。Gentoo就是其中之一。

对于基于Debianapt-get的发行版,使用该工具很容易提取软件包的源代码:

$ apt-get source <package-name>

其他发行版可能会使用其他方式来提供资源。也许其他 SO 专家可能想对此发表评论/回答。

于 2013-05-05T12:44:59.910 回答
2

select(2)是一个系统调用(但我建议使用poll(2)代替 - 谷歌C10K problem了解我为什么更喜欢pollselect。所以它确实是在linux 内核中实现的。它libc包含一个小的存根函数(将 C 参数约定转换为系统调用约定,然后使用例如一些SYSENTER机器指令执行真正的系统调用)。您可以查看MUSL Libc的源代码(我推荐 MUSL libc,因为它的源代码更容易阅读)或真正的Gnu libc以查看该包装函数。

FD_SET只是一个宏,定义在/usr/include/x86_64-linux-gnu/sys/select.h并且真的在/usr/include/bits/select.h

但是您尝试了解Linux的软件功能是如何实现的是非常正确的:利用它是免费软件

实际上,系统调用层定义良好且相当稳定(请参阅syscalls(2)手册页,并阅读Advanced Linux Programming了解更多信息。同时查看Posix标准)。研究使用它们的高级库的源代码(例如 Qt、Gtk、...)会更有趣。

从应用程序的角度来看,系统调用是基本的“原子”操作。strace是一个方便的实用程序,用于查找哪些系统调用是由某个进程(或正在运行的程序)完成的。

于 2013-05-05T13:21:46.310 回答