View Single Post
Old 05-09-2003, 11:00   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
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
      }
   }
   
}

Ultima modifica di cionci : 05-09-2003 alle 11:14.
cionci è offline   Rispondi citando il messaggio o parte di esso