我目前正在研究对 I/O 非常敏感的代码,性能方面,我正在寻找从 C 代码中删除 Unix 下的目录的最快方法。我想编写适用于所有常见平台(Android、MacOS X、Linux)的东西,但我愿意为不同风格的 Unix 编写不同的实现(我怀疑 BSD/MacOS X 和 Linux/Android 有不同的技巧)。
以下是我脑海中闪过的几件事:
opendir
在所有平台上,我都可以使用,readdir_r
et al来遍历目录结构,dirent->_d_type
用于区分目录和文件——这在 Linux 下似乎是标准化的,但在 MacOS X 下却不是;在 Linux/Android 下,如果我选择这个选项,我也可以使用
dirfd
和unlinkat
来快速删除每个文件;在所有平台上,我都可以使用 来遍历目录结构
ftw
,flag
用于区分目录和文件;fts_open
在所有平台上,我都可以使用,fts_read
et al来遍历目录结构,FTSENT->fts_info
用于区分目录和文件;我没有检查过,但我的印象是BSD/MacOS X
copyfile
功能可以用来删除一个目录。
这些技术中的一种是否比其他技术更好?我错过了一些明显的东西吗?
请注意,我主要对最小化 I/O 以及更普遍的系统调用感兴趣——我对 CPU 成本并不太贪心。
谢谢