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