Um die Antwort zu ergänzen, haben sie im Buch The C Programming Language (K&RC) ein kleines Beispiel gegeben, wie man ls implementiert. Sie haben die verwendeten Datenstrukturen und Funktionen sehr gut erklärt.
Um zu verstehen, was ls tut, können Sie einen Blick auf die OpenSolaris-Quelle werfen:https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c.
Wenn das überwältigend ist, beginnen Sie unter Solaris damit, truss zu verwenden, um sich die Systemaufrufe anzusehen, die ls macht, um zu verstehen, was es tut. Versuchen Sie es mit Truss:
truss -afl -o ls.out /bin/ls
dann schauen Sie sich die Ausgabe in ls.out
anIch glaube, dass Trace das Äquivalent zu Truss in Linux ist.
ls gabelt nicht. Die Shell verzweigt und führt aus, um jeden Befehl auszuführen, der nicht eingebaut ist, und einer der Befehle, die sie ausführen kann, ist ls.
ls verwendet opendir() und readdir(), um alle Dateien im Verzeichnis schrittweise durchzugehen. Wenn es mehr Informationen über einen von ihnen benötigt, ruft es stat() auf.