Salve devo fare un programma in c che simuli una shell linux. Il problema del mio programma è che i comandi senza argomenti (esempio: ls) li accetta mentre comandi tipo "echo 3" mi da errore nella execvp e non capisco il perchè.
L'idea del mio programma è di prendere da tastiera una stringa suddividerla con strtok in parole inserirle in un array di stringhe e concatenare alla prima parola /bin/ così che una volta passata alla execvp la riconosca.
Questo è il mio codice:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void esegui(char **c){
int status;
int pid=fork();
if(pid==0){
execvp(c[0],c);
perror("execl");
exit(EXIT_FAILURE);
}else if(pid!=-1){
if(waitpid(pid,&status,0) == -1){
perror("waitpid: ");
exit(EXIT_FAILURE);
}else{
return;
}
}else{
perror("fork");
return;
}
}
char **inizializza(char *in){
char **ret;
ret=malloc(1*sizeof(char*));
ret[0]=malloc(30*sizeof(char));
strcpy(ret[0],"/bin/");
char *p;
int i=0;
p=strtok(in," ");
while(p){
i++;
printf("%s \n",p);
if(i!=1){
ret=realloc(ret,i);
int len=strlen(p);
len++;
ret[i-1]=malloc(len*sizeof(char));
strcpy(ret[i-1],p);
}else{
strcat(ret[0],p);
}
p=strtok(NULL," ");
}
return ret;
}
int main(){
char in[1024];
printf("cmd prompt>> ");
scanf("%s",in);
while(strcmp(in,"exit")!=0){
char **pass=inizializza(in);
esegui(pass);
printf("cmd prompt>> ");
scanf("%s",in);
}
return 0;
}
Attendo qualche soluzione grazie.