WindowsとLinuxで同等のプログラムを動作させて、パフォーマンスを調査するという作業を行った。

ディレクトリの走査に、Windows環境 ではFindFirstFileEx、LinuxというかUNIX互換環境ではreaddir(readdir_r)を使うことが多い。http://www.syuhitu.org/other/dir.htmlに丁寧にお手本が書いてある。

実装し、処理データ件数が各環境で一致していることを確認。だがあるLinux環境下だけ、動きが妙に違う。

Windows とLinuxで違うのならまあしょうがない。だが、三つのLinux環境のうち、一つだけ挙動が異なるのだ(残りの二つのLinux環境とWindows環境の挙動は一致している)。

なぜ違うのか、とログを吐き出させてみると、同じデータをコピーしたディレクトリを読んでいるのに、問題のLinux環境だけ読み出しの順序が異なっているのを発見。

よくよく調べてみると、readdirやreaddir_rの読み出し順は保障されていないらしい。どんな順序で読み出されても文句をつけてはいけないのだ。順番を保つためには自分でソートするか、scandirを使え、ということらしい。

WindowsでもLinuxでも自前でソートすることにした。やっと完全に順番も各環境で一致した。気がつくのが遅かった。もっともこのおかげでたちの悪いバグを発見することができた。怪我の功名というやつか・・・