私は現在、パフォーマンスの面でI / Oに非常に敏感なコードに取り組んでおり、Unixの下のディレクトリをCコードから削除する最速の方法を探しています。すべての一般的なプラットフォーム(Android、MacOS X、Linux)で動作するものを書きたいのですが、Unixの異なるフレーバーに対して異なる実装を書きたいと思っています(BSD /MacOSXとLinux/Androidには異なるトリックがあると思います)。
これが私の頭に浮かんだいくつかのことです:
すべてのプラットフォームで、ディレクトリをファイルと区別するために、などを使用してディレクトリ構造をたどることができます。これはLinuxでは標準化されているようですが
opendir
、MacOSXでは標準化されていません。readdir_r
dirent->_d_type
Linux / Androidでは、このオプションを選択すると、各ファイルをすばやく削除するために使用することもでき
dirfd
ますunlinkat
。すべてのプラットフォームで、ディレクトリとファイルを区別するために
ftw
、を使用してディレクトリ構造をたどることができます。flag
すべてのプラットフォームで、ディレクトリとファイルを区別するために、などを使用してディレクトリ構造
fts_open
をたどることができます。fts_read
FTSENT->fts_info
確認していませんが、BSD /MacOSX
copyfile
機能でディレクトリを削除できる印象があります。
これらの手法の1つは、他の手法よりも厳密に優れていますか?明らかな何かが欠けていますか?
私は主にI/Oを最小限に抑えることに関心があり、より一般的にはシステムコールに関心があることに注意してください。CPUコストについてはあまり貪欲ではありません。
ありがとう