大约有一百万次我不得不寻找a或或其他什么/usr/include/foo.h
的成员。有一个用于库和内核调用的 man 部分,其中一些包含数据结构的描述,另一些则不包含。是否有一个地方可以查找内核和库数据结构的定义?struct foo
foo_t
答案1
GNU C 库有一个参考手册其中包括标准库和扩展中所有或大部分数据结构的文档。这有一个类型索引。请注意,还有一本“GNU C 参考手册”,但它和“GNU C图书馆参考手册”是两个不同的东西。
您还可以自动生成足以浏览数据结构的文档强力氧(请注意,它对于实际注释的内容效果更好,但可以通过这种方式粗略地使用)。我在这里尝试了这个/usr/include
,花费了不到 2 分钟(制作,注意,大约 800 MB 的 html)。步骤是:
在某处(任何地方)创建一个基本配置文件,
doxygen -g doxygen.conf
.编辑该文件并更改以下设置:
OUTPUT_DIRECTORY = /home/foo/whatever # documentation goes here OPTIMIZE_OUTPUT_FOR_C = YES EXTRACT_ALL = YES INPUT = /usr/include FILE_PATTERNS = *.h RECURSIVE = YES GENERATE_LATEX = NO
请注意,所有这些都已存在于配置文件中,您需要搜索并更改/设置所示值。
产生:
doxygen doxygen.conf
。
现在开放/home/foo/whatever/html/files.html
。有一个index.html
,但它可能是WTF(再次强调,doxygen 主要用于专门为其注释的内容),因此文件列表是最可预测的入口点。还有一个丰富的“数据结构索引”,但无论出于何种原因,并不是您认为的所有内容都在其中建立了索引。例如,structstat.html
您可以通过文件列表找到一个,asm 通用 -> stat.h,但是《数据结构索引》中没有提到“struct stat”。许多标准 C lib 事物都遵循这种模式:可预测标头 ( ) 中有一个宏/定义/类型定义,sys/stat.h
它会引入一些外部内容,最终出现在特定于平台/系统的标头中,例如asm-generic.h
.我确信您之前已经注意到这一点。 stat 示例还不错,至少最终定义仍然被调用struct stat
而不是struct _fooX_stat
。
因此,这需要一些时间来适应,并且最终并不比使用grep
.它还具有包含非用户字段的缺点(例如,将struct stat
上面记录的 与 中的描述进行比较man 2 stat
)。对于标准库(和 GNU 扩展),参考手册要好得多。不过,WRT 手册中没有的东西,总比没有好一点。我建议,如果您确实想以这种方式使用它,最好独立执行单个目录而不是整个目录(线索:您可以设置RECURSION = NO
)。 800 MB 的 html 相当笨重。