Bonjour tout le monde!
J'essaie de programmer la commande ls de linux.
J'ai fait un premier fichier qui marche :Sauf que les elements ne sont pas dans l'ordre alphabétique.
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 #include <stdlib.h> /* exit */ #include <stdio.h> /* printf */ #include <dirent.h> /* struct DIR */ #include <errno.h> /* perror */ int main (int argc, char * argv []) { DIR * ndir; struct dirent * rdir; if (argc!=1) { fprintf(stderr,"Usage : ls\n"); exit(1); } /* ouverture du repertoire courant */ if((ndir=opendir("."))==NULL) { perror("OPENDIR"); exit(2); } rdir=readdir(ndir); /* listage des fichiers */ while (rdir != NULL) { printf("%s ",rdir->d_name); rdir=readdir(ndir); } printf("\n"); closedir(ndir); exit(0); }
J'ai donc ajouté un trie. Ca compile aussi mais ca me donne le meme resultat que le premier.
J'ai indiqué la ligne où je pense que l'erreur est.
Deuxieme fichier :
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 #include <stdlib.h> /* exit */ #include <stdio.h> /* printf */ #include <dirent.h> /* struct DIR */ #include <errno.h> /* perror */ struct maillon { char * valeur; struct maillon *suivant; struct maillon *precedant; }; int main (int argc, char * argv []) { struct maillon *tete; /* tete de liste */ struct maillon *nm; /* sert a creer de nouveaux maillons */ struct maillon *buff; /* sert a se ballader */ int nb_maillon=0; /* nombre de maillons (pour affichage) */ int i; /* compteur */ DIR * ndir; struct dirent * rdir; tete=NULL; if (argc!=1) { fprintf(stderr,"Usage : lss\n"); exit(1); } /* ouverture du repertoire courant */ if((ndir=opendir("."))==NULL) { perror("OPENDIR"); exit(2); } rdir=readdir(ndir); /* LISTAGE DES FICHIERS */ while (rdir != NULL) { nm=malloc(sizeof(struct maillon)); /* nouveau maillon */ (*nm).valeur=rdir->d_name; /* affectation de la valeur */ nb_maillon=nb_maillon+1; /* incrementation */ /* S'il n'y avait pas de maillon */ if (tete==NULL) { tete=nm; (*tete).suivant=tete; (*tete).precedant=tete; } else { /* TRIE */ buff=tete; /* On se ballade pour trouver la place du nouveau maillon */ while ((*nm).valeur>(*buff).valeur)/*-------------------------------- PROBLEME sur la condition (je pense) il doit penser que chaque nouvelle valeur est superieure */ { buff=(*buff).suivant; /* Si le nouveau maillon doit etre en derniere place */ if (buff=tete) { break; } } /* Affectation de nm */ (*nm).suivant=buff; (*nm).precedant=(*buff).precedant; /* Affectation du maillon de buff */ (*buff).precedant=nm; /* Affectation du maillon avant buff */ (*(*nm).precedant).suivant=nm; /* Si le nouveau maillon doit etre en 1ere place */ if ((*nm).valeur<(*tete).valeur) { tete=nm; } } rdir=readdir(ndir); } /* AFFICHAGE */ buff=tete; for (i=0;i<nb_maillon;i=i+1) { printf("%s ",(*buff).valeur); buff=(*buff).suivant; } printf("\n"); closedir(ndir); exit(0); }
Merci d'avance
Partager