Pregunta
Tengo un proyecto que requiere el uso de la familia exec. Mi proyecto consiste en hacer un shell interactivo. El shell implementará algunos comandos básicos como cd, ls, echo, etc. He estado investigando el uso de exec, pero no he encontrado un sitio útil. Cualquier enlace sugerido ayudaría.
int ret;
ret = execl ("/bin/ls", "ls", "-1", (char *)0);
¿Cómo puedo obtener el resultado de esta operación para mostrar en la pantalla?
Solución
El código que escribiste funciona para mí en un programa de prueba simple que no hace nada más. Recuerde, cuando llama a execl, el proceso conserva todos los manejadores de archivos antiguos. Entonces, sea cual sea el stdout cuando llames execl, será el mismo cuando se cargue el nuevo binario. Si solo quieres que la salida vaya a la terminal, asegúrate de que la salida estándar vaya a la terminal.
Si desea realizar I / O con otro programa, popen es bueno para esto (como se mencionó en mgb). Hará un nuevo proceso, configurará la plomería para usted, llamará a alguna variante de exec y devolverá un identificador de archivo que puede usar para la comunicación.
Otros consejos
haciendo
int fd = 1;
dup(fd);
close(fd);
obtiene el resultado en la pantalla.