Abychom doplnili odpověď, v knize The C Programming Language (K&RC) uvedli malý příklad, jak postupovat při implementaci ls. Velmi dobře vysvětlili používané datové struktury a funkce.
Abyste pochopili, co ls dělá, můžete se podívat na zdroj OpenSolaris:https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c.
Pokud je to ohromující, na Solarisu začnete pomocí truss, abyste se podívali na systémová volání, která ls dělá, abyste pochopili, co dělá. Pomocí nosníku zkuste:
truss -afl -o ls.out /bin/ls
pak se podívejte na výstup v ls.out
Věřím, že trace je ekvivalentem truss v Linuxu.
ls se nerozvětvuje. Shell se rozvětvuje a spouští, aby spustil jakýkoli příkaz, který není vestavěný, a jeden z příkazů, který může spustit, je ls.
ls používá opendir() a readdir() k procházení všemi soubory v adresáři. Pokud potřebuje více informací o jednom z nich, zavolá stat().