Pour ajouter à la réponse, dans le livre The C Programming Language (K&RC), ils ont donné un petit exemple sur la façon de mettre en œuvre ls. Ils ont très bien expliqué les structures de données et les fonctions utilisées.
Pour comprendre ce que fait ls, vous pouvez jeter un coup d'œil à la source OpenSolaris :https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c.
Si c'est écrasant, sur Solaris, vous commencez par utiliser truss pour regarder les appels système que ls fait pour comprendre ce qu'il fait. À l'aide de treillis, essayez :
truss -afl -o ls.out /bin/ls
puis regardez la sortie dans ls.out
Je crois que trace est l'équivalent de treillis sous Linux.
ls ne bifurque pas. Le shell fork et execs afin d'exécuter toute commande qui n'est pas intégrée, et l'une des commandes qu'il peut exécuter est ls.
ls utilise opendir() et readdir() pour parcourir tous les fichiers du répertoire. S'il a besoin de plus d'informations sur l'un d'eux, il appelle stat().