elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda creando Shell con execvp y fork
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda creando Shell con execvp y fork  (Leído 2,626 veces)
erovira

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Ayuda creando Shell con execvp y fork
« en: 24 Octubre 2015, 10:51 am »

Buenos días,
vamos a ver, estoy intentando crear un shell en C llamado Gungan, lo que hago simplemente es leer la instrucción que el usuario entre, hacer un hijo para poder usar execvp y ejecutar dicha instrucción. A "bajo nivel", nada de printf, scanf... Con system en vez de execvp sé hacerlo, pero con el execvp no lo consigo.
El tema está en que si entra "ls", el programa tal y como lo tengo me funciona, pero cuando intento entrar un parámetro de la instrucción, por ejemplo: "ls -l", me hace un ls, como si no cogiese el -l.
Argv según leí (a parte de ser el valor que le puedes pasar a un programa al ejecutarlo), también es un puntero a una lista con todas las instrucciones de sistema, por eso se lo pongo al execvp(aux, argv).

Alguna idea de como poder entrar instrucciones con parámetros? (ls -l), (ps aux), (ps -ef) ...

Gracias de antemano!

Código
  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5.  
  6. int main(int argc, char *argv[]){
  7.  
  8. int i = 0;
  9. int fill;
  10. char frase[100];
  11. char command[15];
  12. int fd;
  13. char aux[10];
  14.  
  15. sprintf(command,"Gungan>> ");
  16. write(1,command,strlen(command));
  17. read(0, &aux[i],1);
  18.  
  19. while(aux[i] != '\n'){
  20. i++;
  21. read(0,&aux[i],1);
  22. }
  23. aux[i]='\0';
  24. printf("%s", aux);
  25.  
  26.        fill = fork();
  27. if (fill>0){ //codi pel pare
  28. wait();
  29. exit(0);
  30. }
  31. else{
  32. if (fill==0){ //codi pel fill
  33. if(execvp(aux, argv) < 0){
  34. printf("Error merdix");
  35. }  
  36.   exit(0);
  37. }
  38. else { //codi si tira error el fork
  39.     sprintf(frase,"JARL!! ERROR\n");
  40. write(1,frase,strlen(frase));
  41. }
  42. }
  43. return 0;
  44. }
  45.  

Si uso:
Código
  1. char *args[] = {"ls","-l",NULL};
  2. execvp(args[0],args);
  3.  

Si que me ejecuta bien el ls -l cosa que no entiendo, ya que el primer parámetro de execvp te indica cual es la instrucción a ejecutar y el segundo parámetro(args), en qué lista encontrarlo o eso creo. Aunque execvP ya de por sí usa la variable de entorno PATH, así que ni idea, a ver si alguien me aclara un poco


« Última modificación: 24 Octubre 2015, 11:19 am por erovira » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Ayuda creando Shell con execvp y fork
« Respuesta #1 en: 24 Octubre 2015, 11:20 am »

Que es lo que no te va? Tal y como lo tienes programado si lo ejecutas como "./tuprograma -parametros" y luego introduces el ejecutable funciona.
Si quieres leer tambien los parametros desde tu programa con el teclado deberías modificar el código para leer los argumentos.


En línea

erovira

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Ayuda creando Shell con execvp y fork
« Respuesta #2 en: 24 Octubre 2015, 11:30 am »

Pues la intención es buclarlo infinitamente mas adelante y solo poder pararlo con control C cambiando un par de interrupciones, pero aun queda para eso. Por eso no puedo pasar parámetros al ejecutar el programa, porque puede que ahora me hagan ls -l y justo después sin salir del programa hagan ps -ef por ejemplo
En línea

erovira

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Ayuda creando Shell con execvp y fork
« Respuesta #3 en: 24 Octubre 2015, 11:32 am »

Que es lo que no te va? Tal y como lo tienes programado si lo ejecutas como "./tuprograma -parametros" y luego introduces el ejecutable funciona.
Si quieres leer tambien los parametros desde tu programa con el teclado deberías modificar el código para leer los argumentos.

Vale y como le paso los parámetros al execvp?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda creando texto
Programación Visual Basic
pedraosone 2 1,536 Último mensaje 15 Marzo 2008, 20:37 pm
por pedraosone
Ayuda creando minichat
Programación Visual Basic
*Ghost* 4 2,493 Último mensaje 7 Agosto 2008, 05:09 am
por BlackZeroX
Ayuda creando un menú en vb
Programación Visual Basic
CICOLO_111234 3 1,897 Último mensaje 7 Agosto 2008, 12:21 pm
por JmHk
Emular MultiHilos (multithread) Sin Fork (FAKE FORK) « 1 2 »
PHP
OzX 14 8,973 Último mensaje 27 Marzo 2009, 00:24 am
por OzX
Ayuda con fork() y señales SIGUSR1
Programación C/C++
murrayxaiyan 2 2,544 Último mensaje 3 Mayo 2017, 23:32 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines