Sto provando a codificare una shell. Ma la mia shell non esegue il comando - ls -l | Di meno. Sto usando execvp. il codice è riportato di seguito.linux execvp; ls non può accedere |, No such file or directory
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(){
int pid, status, num, len;
char str[1000], cwd[100];
char* word[100];
getcwd(cwd, sizeof(cwd));
while(1){
chdir(cwd);
printf("%s > ", cwd);
gets(str);
pid=vfork();
if(pid == 0){
num = 0;
word[num] = strtok (str, " ");
while (word[num] != NULL) {
word[num] = strdup (word[num]);
len = strlen (word[num]);
if (strlen (word[num]) > 0)
if (word[num][len-1] == '\n')
word[num][len-1] = '\0';
word[++num] = strtok (NULL, " ");
}
if(strcmp(word[0], "cd") == 0){
chdir(word[1]);
getcwd(cwd, sizeof(cwd));
}
else{
execvp(word[0],word);
}
exit(0);
}
else{
wait(&status);
}
}
return 0;
}
'|' è un token relativo alla shell, per quanto ne so. Farlo fuori da una shell non funziona davvero perché è la shell che legge '|' e fa sì che la magia avvenga. Senza il guscio per far funzionare la piping magica ... non funziona. – Cornstalks
SO c'è un altro modo per eseguire | |? posso in qualche modo la stringa e con la forza bruta farlo funzionare –
@Cornstalks parla veramente. 'execvp' viene scritto per eseguire un comando con un set di parametri (se necessario). Puoi provare 'system' per chiamare una linea di comando della shell in piena regola. – lurker