Lambda13 | Bonjour,
je cherche à développer un shell Unix, et pour ce faire j'ai besoin de découper une chaine de caractère (la commande) grace à STRTOK. Le problème, c'est que si tout se passe bien à la compilation, le découpage ne marche absolument pas... Inexpliquable !
Je vous copie / colle le code ci dessous, si vous avez une idée, je suis preneur !
Code :
- #include <wait.h>
- #include <iostream>
- #include <errno.h>
- #include <signal.h>
- #include <unistd.h>
- #include <string>
- #include <fstream>
- #define MAX_SIZE 1024
- using namespace std;
- bool chkQuit(const string &cmd)
- {
- if(cmd=="q" || cmd=="quit" || cmd=="exit" || cmd=="x" )
- exit(0);
- }
- int main()
- {
- string cmd, output, tmp;
- static char *argv[MAX_SIZE];
- const char *delim=" ";
- int i=0;
- while(1)
- {
- cout << "esh $ ";
- getline(cin,cmd);
- chkQuit(cmd);
- size_t size = cmd.size() + 1;
- char * buffer = new char[ size ];
- // copier la chaîne
- strncpy( buffer, cmd.c_str(), size );
- buffer[size-1]='\0';
- cout << buffer << endl;
- cout << strtok(buffer," " ) << endl;
- cout << strtok(buffer," " ) << endl;
- cout << strtok(buffer," " ) << endl;
- cout << strtok(buffer," " ) << endl;
- cout << strtok(buffer," " ) << endl;
- /* while (tmp.c_str())
- {
-
- cout << i << strtok(buffer," " ) << endl;
- // argv[i] = new char[ tmp.size() + 1];
- // strncpy(argv[i],tmp.c_str(),sizeof(argv[i]+1));
- i++;
- }
- cout << "decoupe finie" << endl;
- argv[i]=NULL;
- delete buffer;
- //string argv[]={"ls","-la",NULL};
- //execv(string("/bin/"+cmd).c_str(),argv.c_str());
- i=0;
- while(argv[i]!=NULL) cout << argv[i++] << endl;
- //cout << output << endl;
- */ }
- return 0;
- }
|
A ce sujet, si quelqu'un a déja programmé un shell unix perso, ce serait sympas de paratager les sources, histoire que ça me donne une petite idée |