La partenza del thread precedente non era male...
Parti da qualcosa di semplice, sviluppando i programmi inclusi nella shell...ad esempio cd, mv, cd, exit...
Codice:
int cp(vector<string> &args)
{
...
}
int mv(vector<string> &args)
{
...
}
int cd(vector<string> &args)
{
...
}
int launcher(vector<string> &args)
{
//qui fai la fork e la exec per lanciare un programma esterno
}
int interprete(char buf[])
{
vector<string> args;
//suddividi la stringa in parole (delimitate dagli spazi) e
//le metti in args
if(args[0].compare("exit"))
return -1;
if(args[0].compare("cd"))
return cd(args);
//e così via....
return launcher(args); //se non è stato chiamata nessuna
//funzione interna, alora si è cercato di chiamare un programma esterno
}
int main(int argc, char *argv[])
{
char buf[1024];
while(1) {
do {
cout << endl << "klesh> ";
cin.getline(buf, 1023); //leggi un linea dallo standard input
if(cin.fail())
{
cerr << "Stringa troppo lunga" << endl;
cin.clear();
}
else
break;
} while(1);
switch(interprete(buf))
{
case -1: //qui puoi fare varie cose se servono
...
exit(0);
break;
//qui ci sono gli altri eventuali case
}
}
}