Sistemas Operativos > GNU/Linux
Re: shell usando fork() y execvp();
ciros:
No se como hacer un pequeño shell que reconosca mas de un argumento y solo puedo utilizar fork() y execvp(),
rafa_lopez:
Tengo hecha una shell que cumple esas características, a parte de muchas otras como procesos en background(&), redireccionamientos(>, <), tuberias(|), comandos internos (ps, cd, pwd), manejo de variables de entorno, gestor de consola,...
si te interesa te puedo pasar el codigo
De Profundiis:
Hola,
hace un par de años tuve que hacer un Shell para Linux (microshell lo llamamos).
Tengo el código fuente por ahí. También hacía redirecciones de salida y entrada y usaba tuberías.
No sé si el problema que tienes es que tu programa no reconoce varios tokens o es que no te tira bien el execvp. Pero para hacer funcionar el shell, con el fork() y el execvp() vas sobrado.
Lo primero que hacía yo era separar la línea de comandos (después de analizarla sintáctica y semánticamente) en varios tokens y guardarla en una estructura con char *argumentos[MAXTOKENS]
o algo parecido. Luego bastaba con crear un proceso hijo mediante fork(), poner al padre a esperar al hijo con wait() o waitpid() y usar el execvp con:
error = execvp(mandato.argumentos[0], &mandato.argumentos[0]);
...si no me equivoco.
Pero ya te digo, debo tener el código por ahí. También hicimos un 'microat'. Un at de linux pero con menos funcionalidades:)
Bueno, si quieres algo envía un U2U que tengo ganas de probarlo:P y te mando el código.
Saludos.
gregobm:
Yo necesito una shell de linux escrita en C, a ver si me podeis pasar las que teneis vosotros echas para echarle un vistazo.
Si podeis mandarmela a gregobm arroba hotmail punto com.
Gracias de antemano.
NRM:
Seria interesante e instructivo leer ese codigo fuente. Si lo encuentras te agradeceria que lo publicaras en el foro.
Navegación
[#] Página Siguiente
Ir a la versión completa