Cuando lo hacemos desde la línea de comando, es muy fácil:
echo -e «david\njose\nalfredo\nzacarias\npatrick\ngaspar» | sort
Pero a la hora de querer hacer un programa que ejecute la orden sort, pasándole una serie de líneas no es tan intuitivo.
Para ello, he construido una tubería, y para ello hacemos que el descriptor STDIN_FILENO sea input[0] es decir, el descriptor de lectura de la pipe (con dup2).
Luego pasamos las líneas que necesitemos a la pipe a través del descriptor input[1] y lo cerramos para dar por finalizada la entrada de datos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <unistd.h> #include <errno.h> #include <stdio.h> int main() { int input[2]; pipe(input); dup2(input[0], STDIN_FILENO); write(input[1], "david\njose\nalfredo\nzacarias\npatrick\ngaspar", 43); close(input[1]); execlp("sort", NULL); printf("ERROR : %s", strerror(errno)); } |
Notas: El código fue creado rápidamente, por ello en el write, encontramos un 43 (la longitud de la cadena).
Los nombres han sido inventados, menos los dos últimos, yo soy Gaspar y Patrick es la persona a la que agradezco parte del mérito de que este fragmento de código esté hoy aquí.
Pingback: Bitacoras.com /