53

Linux ライクなシステムで opendir/readdir を使用してファイルのリストを取得しています。ディレクトリ エントリは、ファイル名のアルファベット順に返されるようです。ただし、この順序が保証されていることについて、man ページには何も表示されません。

readdir が注文を保証するかどうか教えてもらえますか?

4

7 に答える 7

48

このreaddirメソッドは順序を保証しません。それらがアルファベット順にソートされていることを確認したい場合は、自分で行う必要があります。

注:これが事実であるという決定的なドキュメントを少し探しました。私が最も近いのは次のリンクです

決して決定的なものではありませんが、コマンド、その履歴、およびその実装が通常どのようにトラバーサル順序であるかの概要を示しています。

于 2012-01-23T19:34:15.390 に答える
14

つまり、いいえ、 readdir() は特定の順序を保証しません。

glibc マニュアルの readdir の例から

ディレクトリに表示されるファイルの順序は、かなりランダムになる傾向があります。より便利なプログラムは、エントリを印刷する前に (おそらくアルファベット順で) 並べ替えます。

于 2012-01-23T19:37:33.327 に答える
12

「Linuxプログラミングインターフェイス」から:

によって返されるファイル名はreaddir()、ソートされた順序ではなく、ディレクトリ内で発生する順序です(これは、ファイルシステムがファイルをディレクトリに追加する順序と、その後のディレクトリリストのギャップを埋める方法によって異なります)。ファイルは削除されます)。(このコマンドls –fは、ファイルが取得されるのと同じソートされていない順序でファイルを一覧表示しますreaddir()。)

この関数scandir(3)を使用して、プログラマーが定義した基準に一致するファイルのソート済みリストを取得できます。詳細については、マニュアルページを参照してください。SUSv3では指定されていませんがscandir()、ほとんどのUNIX実装で提供されています。

注:scandirはPOSIX.1-2008の一部です。周りに定義されている著作権で保護されたバージョンは、 FreeBSDlibcreaddirで入手できます。

于 2012-01-24T09:56:42.937 に答える
9

明示的に保証されていません。多くの場合、順序付けはいくつかの規則に従いますが、規則は非常に複雑であるため、それらに依存するべきではありません。たとえば、順序付けは、同じディレクトリで行われている他の操作の影響を受ける可能性があり、それらを制御することはできません。順序はランダムとして扱い、必要に応じて自分で並べ替えます。

于 2012-01-23T19:34:57.180 に答える
8

いいえ、readdir は順序を保証しません。

(一部のファイル システムは、ディレクトリ エントリを特定の順序で格納する場合があります。そのような場合、readdir は同じ順序でエントリを返しますが、それは readdir 自体の機能ではありません。)

于 2012-01-23T19:36:23.347 に答える