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
#include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]){ int i = 0; int fill; char frase[100]; char command[15]; int fd; char aux[10]; read(0, &aux[i],1); while(aux[i] != '\n'){ i++; read(0,&aux[i],1); } aux[i]='\0'; fill = fork(); if (fill>0){ //codi pel pare wait(); } else{ if (fill==0){ //codi pel fill if(execvp(aux, argv) < 0){ } } else { //codi si tira error el fork } } return 0; }
Si uso:
Código
char *args[] = {"ls","-l",NULL}; execvp(args[0],args);
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