2

引数として受け入れDIR *、その中のファイルを一覧表示する関数を作成しました(readdir関数付き)

statさらに、によって返されたファイルを処理できるようにしたいだけですreaddir。どこを指しているのかが明確ではないDIR *ので、ディレクトリのフルパスを取得する方法はありますか、それともファイルDIR *できる他の方法はありstatますか?

4

3 に答える 3

4

dirfd()他の多くの回答と同様に、を使用して、各エントリに対してreaddir()呼び出し関数で読み取ることができfstatat()ます。

int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags);

この比較的あいまいな関数は、必要なことだけを実行すると思います。

openat()または、ディレクトリのfdとディレクトリから読み取ったパス名を渡すことを呼び出すこともできます。次に、を実行fstat()してファイルの統計を取得します。

于 2012-08-14T15:18:05.963 に答える
2

dirfd()私はそうは思いませんが、に対応するファイル記述子を取得するために使用できるはずです。それを使用して、そのディレクトリに変更するためにDIR *呼び出すことができます。fchdir()

次に、によって返される名前はreaddir()現在のディレクトリに対してローカルになり、stat()直接それらを使用できます。

更新:明確にするために、これは呼び出すことと同じではなくchroot()、プロセスの現在のディレクトリの通常の変更です。

于 2012-08-14T14:10:34.900 に答える
1

@unwindの回答に基づいており、Linuxを使用しているため:

  • dirfd()ディレクトリのファイル記述子を取得するために呼び出す
  • を使用してあなたのpidを取得しますgetpid()
  • /proc/<pid>/fd/<dirfd>を使用してリンクを読んでくださいreadlink()。それはあなたのディレクトリを名前で参照します!
于 2012-08-14T14:26:44.083 に答える