Hola,
El programa que he hecho consiste en que se ejecute varios comandos como haria en la shell ls | sort ... pero sin poner |, es decir, sería ./prueba ls sort y asi tendría que ejecutarse.
Lo que he hecho ha sido crear un programa con un bucle hasta el numero de argumentos que metas - 1. Con esto voy mirando si eres el primer comando a ejecutar necesitas crear una tuberia y escribir en ella, luego los comandos intermedios necesitaran leer de la tuberia anterior y escribir en una nueva y el ultimo argumento necesitara leer de la anterior tuberia y escribir en la salida estandar.
Una vez creada la tuberia que necesite cada argumento hago pid = fork(); si pid == 0 entonces eres el hijo y hago que se ejecute el comando que viene en argc
(i es el numero de iteracion en el que estoy) y si eres padre pongo waitpid(-1,status.0);
Bueno, el problema es que a partir de la segunda iteracion, mirando con el gbd he visto que tras pid=fork(); me sale el error "sort: fallo en `stat': -: Descriptor de archivo inválido" y ya no ejecuta nada más , alguien sabe que pued eestar haciendo??