Bueno, esto para los futuros informáticos/as y para la gente que está aprendiendo C en general, dejo aquí una práctica que tuve que hacer en la asignatura de Sistemas Operativos de 1º de Ingeniería en Informática. La práctica consistía en crear una Shell o Intérprete de Comandos para linux en C, el enunciado dice así:

Enunciado

Realice un programa que liste los ficheros del directorio en curso y después muestre por pantalla el mensaje FIN DE PROGRAMA.Realice un interprete de comandos reducido. La función básica de este interprete de comandos será pedir un comando o programa, ejecutarlo y volver a pedir otro comando. El programa terminará cuando se teclee el comando FIN.

El ordinograma del programa será:
shell

Requisitos:

a) Los comandos o programas se ejecutarán poniendo la ruta absoluta
b) Si el comando o programa no tiene ruta absoluta se supondrá que se encuentra en el directorio
directorio /bin.
c) Si el comando o proceso no se ejecuta correctamente se visualizará el mensaje de error.
d) El interprete de comandos quedará bloqueado hasta que termine el programa .
e) El interprete de comandos tendrá el siguiente prompt :
#@>
OPCIONAL:
f) Permitir que ejecute un comando o programa en segundo plano si el programa termina con &.
g) Cualquier otra opción se valorará

Después de todo esto, finalmente mi shell cumple todos los requisitos, y además le añadí una serie de extras como por ejemplo tuberías ( pipes ) , redireccionamiento de entrada y salida… etc.

Aquí tenéis la documentación y el código, espero que os sea de utilidad.