Comment créer son propre shell?
Bonsoir!
J'ai actuellement le projet de créer mon propre shell et j'ai commencé à me renseigner et à faire un plan. J'ai aussi "emprunté" à un site ayant déjà réaliser ce projet une partie de son code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int main(int argc, char* argv[]) {
while(1){
if(execute==1){
if(symbole==0){
printf("DAUPHINE> ");
}
for (j=0;j<10;j++){
eltsCommande[j]=NULL;
}
execute=0;
bg=0;
}
fflush(stdout);
parsing(); |
Ici, eltsCommande[j] est il le tableau prenant sur 10 cases la commande passé? Pourquoi vouloir forcer le buffer à imprimer ce qu'il a l'intérieur si le tout est initialisé à NULL?
Le programme fait ensuite appelle à la fonction de parsing qui va lire les caractères. Je ne la donne pas en entier d'abord pour essayer de concentrer mes efforts de compréhension sur ce qui est utile est ensuite parce que je souhaite comprendre pas à pas comment fonctionne un shell.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| int parsing(){
int i=0;
int cmot=0;
while(1){
c = getchar();
if (c == '\n') {symbole = 0;return 0;}
else if (c == ';') {symbole = 1;return 1;}
else if (c == '&') {symbole = 2;return 2;}
else if (c == '<') {symbole = 3;return 3;}
else if (c == '>') {symbole = 4;return 4;}
else if (c == '|') {symbole = 5;return 5;}
else if (c == EOF) {symbole = 7;return 7;}
else if (c != ' ') {
symbole = 10;
while(c != '\n' && !strchr(delimiteurs,c)){
i=0;
while(c != 32 ){
if((c != '\n') && !strchr(delimiteurs,c)){
mot[i]=c;i++;
c=getchar();
}
else {break;}
}
break;
}
while(c == ' ')
{
c=getchar();
}
ungetc(c,stdin);
mot[i]=0;
eltsCommande[cmot++]=strdup(mot);
fflush(stdout);
if(c == '\n' || strchr(delimiteurs,c))
{
eltsCommande[cmot]=0;
return;
}
}
}
} |
Ici je ne comprends absolument pas la fonction de cette ligne
Code:
1 2 3 4
| while(c != '\n' && !strchr(delimiteurs,c)){
i=0;
while(c != 32 ){
if((c != '\n') && !strchr(delimiteurs,c)){ |
c peut il jamais être égal à 32?
Pourquoi met on deux fois une condition sur f((c != '\n') && !strchr(delimiteurs,c))?