3

そのメインページには次のように書かれています:

fchdir() は chdir() と同じです。唯一の違いは、ディレクトリがオープン ファイル記述子として指定されることです。

そして、プロトタイプは次のように与えられます。

int chdir(const char *path);
int fchdir(int fd);

私の質問は、ディレクトリをファイル記述子として渡すにはどうすればよいですか? ディレクトリには、ファイルのような対応する記述子もありますか?

4

2 に答える 2

4

ディレクトリには、ファイルのような対応する記述子もありますか?

はい。Unix (および Linux) の哲学は、すべてをバイト ストリームとして扱うことです。はい、open(2)ディレクトリで実行して、そのファイル記述子を取得できます。ディレクトリだけでなく、ソケット、パイプ、デバイスもopen(2)システム コールを使用して開き、ファイルのように操作できます。

于 2015-09-24T12:48:11.433 に答える
1

の Opengroup ドキュメントでfchdir読むことができるように、

ファイルステータスフラグとアクセスモードに O_WRONLY または O_RDWR が含まれていない場合、適合アプリケーションは、open() を使用してタイプ directory のファイルのファイル記述子を取得できます。

したがって、ディレクトリを呼び出すopenと、ディレクトリへのファイル記述子が取得されます。ある意味では、はい、すべてのディレクトリにファイル記述子があります。

基盤となる OS は、ファイル記述子を適切なファイルシステム オブジェクトにマッピングするように注意を払います。したがって、このオブジェクトが最下位レベルにある可能性があるものはすべて抽象化されます。

于 2015-09-24T12:50:37.677 に答える