Erreur de segmentation venue de nulle part
Bien le bonjour!
Voilà la situation: je suis une brèle en C (voilà, ça c'est dit) et je suis en train désespérément de créer un programme pour le projet d'un pote.
Le but, pour le moment, est de parcourir une arborescence à partir d'une adresse donnée et d'écrire les adresses absolues de tous les fichiers qui s'y trouvent dans un fichier texte.
Et voilà, j'ai une erreur de segmentation et je sais pas d'où elle vient et où j'ai pu merder dans mon code... (c'est quoi au juste une erreur de segmentation? Ca peut venir d'où en général, c'est du à quoi?)
Voilà le code:
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 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 99 100 101 102 103 104 105 106
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <fcntl.h>
#define max 1024
#define taille 25000
int CreerDB(char *adresserecherche, int db)
{
int ecriture;
DIR *repertoire;
struct dirent *d;
struct stat *stbuf;
char adresse[max];
char temp[max];
int x=256;
int y=32;
int z=4;
//On copie le chemin de base afin de ne pas le modifier
strcpy(adresse, adresserecherche);
//On ouvre le dossier qui correspond
repertoire=opendir(adresse);
if (repertoire==NULL)
{
printf("\nErreur lors de l'ouverture du dossier : %s\n",adresse);
perror("opendir");
exit(0);
}
//Et on lit dans le dossier
while ((d=readdir(repertoire))!=NULL)
{
if (d->d_name[0]!='.')
{
//On crée le chemin complet du fichier/dossier
strcpy(temp, adresserecherche);
if (strcmp(temp,"/")!=0)
{
strcat(strcat(temp, "/"), d->d_name);
}
else
{
strcat(temp, d->d_name);
}
stat(temp, stbuf);
//On teste si on a un dossier avec les permissions demandées
if (stbuf -> st_mode == S_IFDIR)
{
printf(temp);
//Si oui, on relance la fonction sur ce nouveau dossier
CreerDB(temp, db);
}
//Ensuite on regarde s'il y a un fichier qui correspond aux permissions demandées
else if (stbuf -> st_mode == S_IFREG)
{
strcat(temp,"\n");
//Et si c'est le cas, on écrit son adresse
if ((ecriture=write(db, temp, strlen(temp)))==-1)
{
perror("write");
exit(0);
}
}
}
}
//On ferme les dossiers ouverts à chaque récursion :
closedir(repertoire);
}
int main()
{
int db;
char nom[max];
char adresserecherche[max]="/home/gourou/Desktop/Batman/MP3";
char **tableau;
//On ouvre ou crée le fichier "base_donnees"
if ((db=open("base_donnees", O_RDWR|O_CREAT, 0755))==-1)
{
perror("open");
exit(0);
}
//On utilise la fonction CreerDB pour placer toutes les adresses des fichiers/dossiers dans "base_donnees"
CreerDB (adresserecherche, db);
return 0;
} |
Merci de votre attention, que le malloc soit avec vous.