有时候,我想知道一个c函数的实现。我的编辑器是 vim。我尝试了 ctags 和 cscope,还有 man。
man 2|3 只告诉我如何使用一个函数。
ctags和cscope都只能找到部分函数的实现。
他们都找不到一些功能。特别是一些系统功能(调用)。
如果一个函数可以通过包含一些头文件来使用,有什么方法可以很容易地找到函数的实现,
最佳答案
select(2)是 system call (但我建议改用 poll(2) - google C10K problem
以了解为什么我更喜欢 poll
而不是 select
)。所以它真的是在linux kernel内部实现的. libc
包含一个小 stub 函数(将 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的软件功能是如何实现的,你说的很对:利用它是free software .
实际上,系统调用层定义明确且相当稳定(请参阅 syscalls(2) 手册页,并阅读 Advanced Linux Programming 了解更多信息。另请参阅 Posix 标准)。研究使用它们的高级库(例如 Qt、Gtk 等)的源代码会更有趣。
从应用程序的角度来看,系统调用是基本的“原子”操作。 strace
是一个方便的实用程序,用于查找某个进程(或正在运行的程序)完成了哪些系统调用。
关于c - 如何在linux中找到一个函数的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384606/