我目前正在编写对I/O敏感的代码,我正在寻找从C代码中以最快的方式删除Unix下的目录。我希望编写的代码可以在所有常用平台上工作(Android,MacOS X,Linux),但我愿意为不同版本的Unix编写不同的实现(我怀疑BSD/MacOS X和Linux/Android有不同的技巧)。
以下是我考虑过的一些方法:
- 在所有平台上,我可以使用opendir,readdir_r等函数遍历目录结构,使用dirent->_d_type来区分目录和文件 - 这在Linux下似乎是标准化的,但在MacOS X下不是; - 在Linux/Android下,如果我选择这个选项,我还可以使用dirfd和unlinkat来快速删除每个文件; - 在所有平台上,我可以使用ftw函数遍历目录结构,使用flag来区分目录和文件; - 在所有平台上,我可以使用fts_open,fts_read等函数遍历目录结构,使用FTSENT->fts_info来区分目录和文件; - 我没有检查过,但我有印象BSD / MacOS X的copyfile函数可以用于删除目录。
其中一个技术是否比其他技术更好?我是否遗漏了一些明显的东西?
请注意,我主要关心最小化I/O和通用系统调用,而不太在意CPU成本。
谢谢
以下是我考虑过的一些方法:
- 在所有平台上,我可以使用opendir,readdir_r等函数遍历目录结构,使用dirent->_d_type来区分目录和文件 - 这在Linux下似乎是标准化的,但在MacOS X下不是; - 在Linux/Android下,如果我选择这个选项,我还可以使用dirfd和unlinkat来快速删除每个文件; - 在所有平台上,我可以使用ftw函数遍历目录结构,使用flag来区分目录和文件; - 在所有平台上,我可以使用fts_open,fts_read等函数遍历目录结构,使用FTSENT->fts_info来区分目录和文件; - 我没有检查过,但我有印象BSD / MacOS X的copyfile函数可以用于删除目录。
其中一个技术是否比其他技术更好?我是否遗漏了一些明显的东西?
请注意,我主要关心最小化I/O和通用系统调用,而不太在意CPU成本。
谢谢