Bonjour
Je fais un programme pour remplir les fichiers (texte) d'un dossier et leur fixer un taille.
Je pense que celui-ci ne peut marcher qu'avec des fichiers textes et surtout ne doit se modifier lui-même. Donc j'ai fait un test pour le passer.
avec gdb le segmentation fault apparait pour un fwrite des includes standard, donc je pense que c'est un probleme du fichier dans lequelle j'essaye d'écrire.
(Le problème ne doit pas venir du main)
Le probème vient sans doute de taille qui écrit dans le 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 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> void liste(char *,char *); int taille(char *,int); int main(int argc,char *argv[]){ /*en argument on donne la taille mais je ne l'utilise pas pour le moment*/ char *nmprog; nmprog=malloc(sizeof(argv[0])); nmprog=argv[0]; int i=2; while (nmprog[i] != '\0'){ nmprog[i-2]=nmprog[i]; i++; } nmprog[i-2]='\0'; if (argc != 2) printf("donner la taille en octets\n"); else liste(".",nmprog); return 0; } void liste(char *rep,char *nmprog){ DIR *dossier; struct dirent *fichier; struct stat temp; if( NULL != ( dossier = opendir(rep))){ readdir(dossier);readdir(dossier); /*pour passer le dossiers courant et parent*/ while( NULL != ( fichier = readdir(dossier))) { if (-1 == stat(fichier->d_name, &temp)) return; if ((temp.st_mode & S_IFMT) == S_IFDIR)//c'est un dossier donc pas à remplir continue; if ((fichier->d_name) != nmprog) taille(fichier->d_name, 10); } closedir(dossier); } } int taille(char *nom,int taille){/*arguments : nom du fichier texte puis taille en Ko*/ FILE *fichiero; int i; fichiero = fopen(nom, "a"); for (i=0;i<(taille*50);i++) fprintf (fichiero, "c'est du remplissage"); return 0; }
Merci pour toutes les aides que vous pourrez m'apporter.
Partager