Bonsoir à tous,
Pour un projet, je dois préparer un programme pouvant recevoir des arguments en ligne de commande depuis le shell. Voici le fichier main.c en question :
Il utilise de nombreux autres programmes mais le problème que je rencontre ne concerne que certains d'entre eux. Je pense que le problème est similaire pour chacun de mes soucis alors je vais d'abord vous en exposer un premier en espérant que sa résolution m'aide à corriger mes autres soucis.
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
43
44
45
46 #include <stdio.h> #include <string.h> #include "definitions2.h" int main(int argc, char* argv[]) { docShell("graph2.adj"); if (strcmp(argv[2],"-a")==0) { // entrée -a fichier .adj if (strcmp(argv[1],"-dot")==0) { //sortie format .dot T_graphMD* g=fileToGraph(argv[3]); printf("argv[3] : _%s_\n",argv[3]); char*filename=nomGraphe(argv[3],"dot"); printf("filename : _%s_\n",filename); showGraph(filename, g); docShell(filename); } else { // sortie format -la liste d'adjacence T_graphMD* g=fileToGraph(argv[3]); T_graphLA *g_=MDtoLA(g); int i; for (i=0;i<g_->nbVertices;i++) { showList(g_->tAdj[i]); } char* filename=nomGraphe(argv[3],"la"); printf("filename : _%s_\n",filename); LAtoFile(g_, filename); } } if (strcmp(argv[2],"-l")==0) { // entrée -l fichier liste d'adjacence if (strcmp(argv[1],"-dot")==0) { // sortie format .dot T_graphLA* g=fileToLA(argv[3]); T_graphMD * g_=LAtoMD(g); char* filename=nomGraphe(argv[3],"ladot"); showGraph(filename, g_); printf("filename : %s\n",filename); docShell("graph2.adj"); //normalement c'est <<docShell(filename);>>, mais pour tester j'appelle la fonction avec ce fichier } else { // sortie format -adj T_graphLA *g=fileToLA("./graph2.la"); T_graphMD *g_=LAtoMD(g); char*filename=nomGraphe(argv[3],"adj"); graphToFile(g_,filename); } } }
Prenons la fonction docShell appelée dès le début : elle recopie tout simplement sur le shell un fichier comme "graph2.dot" que je vous mets ci-dessous :
Voici le code de docShell :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0 9 3 i i 0 2 i i i 0 4 i 1 i 0
Cette fonction est également appelée à la ligne 36 du fichier main.c. Voilà ce que je remarque : lorsque j'exécute main, par exemple avec la commande << ./main -dot -l ./graph2.la >>, un premier affichage de "graph2.adj" s'effectue correctement. Le second, en revanche (l'affiche demandé dans l'appel de la boucle if ligne 36) ne s'effectue pas. Pourtant, il s'agit du même fichier et mon fopen fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void docShell(const char* filename) { FILE * fp=fopen(filename,"r"); CHECK_IF(fp = fopen(filename, "r"), NULL, "fopen docShell"); char c; while ( (c=fgetc(fp)) != EOF) { printf("%c", c); } fclose(fp); }
Avez-vous idée de ce qui pourrait causer cela ? Peut-être est-ce ma manière de gérer les lignes de commande ?
Je vous remercie beaucoup pour vos éclairages, j'espère que mon message est suffisamment clair et je serai ravi de le préciser si besoin est.
Vous souhaitant une bonne soirée,
louisandrex
Partager