readdir
マニュアルを30分読んだ後、他の質問で多くの人がスレッドセーフではないことを指摘しているのを見て、私の発見を共有したいと思います。
質問する
139 次
1 に答える
1
tl; dr またはを使用しないでくださいreaddir
readdir_r
、それらは安全ではありません!を使用しscandir
ます。
readdir
スレッドセーフではありません(実際、この欠陥があることがわかっているPOSIXのディレクトリ関連関数はこれだけです)。もちろん、簡単なプログラムでも使用できますが、注意してください。
readdir_r
はスレッドセーフですが、特に独自のdirent
バッファを割り当てる必要があるため、使用するのは非常に面倒です。また、思ったほど簡単ではありません(ファイルの名前が提供された配列に収まることが保証されていないため)すべての*nixesおよびすべての場合のすべてのファイルシステムの構造内)。回避策はありますが、使用する場合は「何が起こっても見ないでください」。
これまでのところ、私が知っている唯一の完全に安全で簡単に使用できる関数は、scandir
スレッドセーフであり、基本的にすべてを実行し、ディレクトリエントリのクリーンな配列を残します。あらゆる場面に対応できるとは限りませんが、それ以外の場合は自分で耐えなければならない多くの苦痛を確実に軽減します。
于 2012-09-16T20:00:26.843 に答える