ほとんどのシステム コールは、起動時に共有ライブラリをロードすることによるノイズです。ここで興味深いことが起こります:
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 2 entries */, 32768) = 48
getdents(3, /* 0 entries */, 32768) = 0
close(3)
openat(2)
システム コールを使用して、現在のディレクトリを開きます ("."
) 現在の作業ディレクトリ (AT_FDCWD
国旗)。 O_DIRECTORY
フラグは、ディレクトリを開いてディレクトリの内容を読み取ることを示します。
実際のディレクトリ データは、getdents(2)
を使用して読み取られます。 システムコール。この場合、0 が返されるまで、さらにデータがあるかどうかわからないため、2 回呼び出されています。最後に、ファイル記述子は完了後に閉じられます。
ただし、独自のプログラムを作成する場合は、これらを直接呼び出すのではなく、代わりに opendir(3)
を使用します。 、 readdir(3)
、および closedir(3)
ディレクトリを読み取る。それらは移植可能 (POSIX 準拠) であり、基礎となるシステム コールの詳細から隔離されます。また、IMO の方が使いやすいです。