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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Ici je ne comprends absolument pas la fonction de cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } } } }
c peut il jamais être égal à 32?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while(c != '\n' && !strchr(delimiteurs,c)){ i=0; while(c != 32 ){ if((c != '\n') && !strchr(delimiteurs,c)){
Pourquoi met on deux fois une condition sur f((c != '\n') && !strchr(delimiteurs,c))?
Partager