5

次のタスクを検討してください。

1) ターゲット ディレクトリの内容を読み取り、見つかった各 dirent 構造をいくつかのフィルター関数に渡し、後で処理するためにフィルター処理された要素を何らかの方法で記憶します。

2) しばらくして、フィルタリングされた要素を反復処理し、それらを処理します (何らかの I/O を実行します)。

最も明白な方法は、サブディレクトリの名前を保存することです。
ただし、メモリ使用量を最小限に抑え、追加の I/O を回避したいと考えています。

POSIX マニュアルによると、telldir() を使用して各ディレクトリ エントリの位置を保存し、後で seekdir() を使用してそれらを復元できます。これらの位置を有効に保つには、ターゲット ディレクトリを開いたままにし、rewinddir() 呼び出しを使用しないようにする必要があります。
ディレクトリストリームを開いたままにして、ディレクトリ位置のリスト(long int`s)を保存することが適切な解決策のようです。
ただし、フォルダーの変更後に保存された位置が有効なままかどうかは不明です。POSIX 標準では、これらの条件に関するコメントは見つかりませんでした。

  • 1) 新しいディレクトリ エントリのみが追加/削除されたときに、保存された位置が有効なままかどうか。
  • 2) フィルタリングされたディレクトリ エントリの一部が削除された場合に、変更されていないディレクトリ エントリの格納位置が有効なままかどうか。
  • 3) フォルダーの変更後、保存された位置が別のディレクトリ エントリを指すことは可能ですか?

特定のシステムについてこれらの質問に対する答えをテストして見つけるのは簡単ですが、このトピックに関する標準の内容を知りたいです

ありがとうございました

4

1 に答える 1

2

ディレクトリを呼び出すrewinddirか、ディレクトリを閉じて再度開くまで、ディレクトリの内容のビューは変更されません。参考書が手元になくてすみません。必要なら後で見つけます。

于 2010-10-14T17:26:05.720 に答える