Per aggiungere alla risposta, nel libro The C Programming Language (K&RC) hanno fornito un piccolo esempio su come implementare ls. Hanno spiegato molto bene le strutture dati e le funzioni utilizzate.
Per capire cosa fa ls, puoi dare un'occhiata alla fonte di OpenSolaris:https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c.
Se questo è travolgente, su Solaris inizi usando truss per guardare le chiamate di sistema che fa ls per capire cosa fa. Usando il traliccio, prova:
truss -afl -o ls.out /bin/ls
quindi guarda l'output in ls.out
Credo che trace sia l'equivalente di truss in Linux.
Non si biforca. La shell esegue il fork e l'exec per eseguire qualsiasi comando che non sia integrato e uno dei comandi che può eseguire è ls.
ls utilizza opendir() e readdir() per scorrere tutti i file nella directory. Se ha bisogno di maggiori informazioni su uno di essi, chiama stat().