Bei den meisten Systemaufrufen gibt es Rauschen vom Laden gemeinsam genutzter Bibliotheken beim Start. Die interessanten Dinge passieren hier:
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)
Der openat(2)
Systemaufruf wird verwendet, um das aktuelle Verzeichnis zu öffnen ("."
) relativ zum aktuellen Arbeitsverzeichnis (die AT_FDCWD
Flagge). Die O_DIRECTORY
Flag zeigt an, dass es das Verzeichnis öffnen und den Inhalt des Verzeichnisses lesen möchte.
Die eigentlichen Verzeichnisdaten werden mit getdents(2)
gelesen Systemaufruf. In diesem Fall wurde es zweimal aufgerufen, da bis zur Rückgabe von 0 nicht sicher ist, ob weitere Daten vorhanden sind oder nicht. Schließlich wird der Dateideskriptor geschlossen, nachdem er fertig ist.
Wenn Sie jedoch Ihr eigenes Programm schreiben würden, würden Sie diese nicht direkt aufrufen – stattdessen würden Sie opendir(3)
verwenden , readdir(3)
, und closedir(3)
ein Verzeichnis lesen. Sie sind portabel (POSIX-kompatibel) und isolieren Sie von den Details der zugrunde liegenden Systemaufrufe. Sie sind meiner Meinung nach auch einfacher zu verwenden.