Tout est dit dans le titre à la compilation aucun problème mais lors de l'exécution de mon programme.
Je vous met le code et les explications. Ce code à pour but de chercher les fichiers comportant l'extension passée en paramètre puis de modifier le contenu en le cryptant en rot13. Le code n'est pas encore finni, pour l'instant je veux juste qu'il m'affiche les fichiers trouvés. Il m'affiche bien les fichiers mais ensuite il m'affiche "erreur de segmentation".
C'est un sujet de TP donc ce code n'a pas vraiment d'utilité ...
Merci d'avance pour l'aide que vous pourrez m'apporter
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 /* crypte rep_depart extension nbMaxFils (Nb maximum de fils qui crypteront chacun des fichiers trouvés) tube : -> le père ouvre les chemin du fichier a traiter -> les fils signalent qu'ils ont terminé Tous les fichiers possédant cette extension effectue un cryptage rot13 -> par un processus fils -> communication par tube */ #include <iostream> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <dirent.h> #include <string.h> #define MAXNAME 100 using namespace std; /* on créé le tube en premier */ int p[2]; // Fonction de cryptage // char rot13(char n){ if(n<'z' && n>'z'){ n += 'a'; n = (n+13)%26; } else if(n<'Z' && n>'A'){ n += 'A'; n = (n+13)%26; } return n; } int main(int argc, char **argv){ // Test des arguments if(argc!=4){ cout << "Usage: crypte rep_depart ext nbProc" << endl; exit(2); } //ouverture du tube pipe(p); // Déclaration des variables int nbProc; struct stat buf; struct dirent *ent; char nom[MAXNAME]; char *ext; char *nomRep; DIR *rep; // On transtype le nombre de processus nbProc = atoi(argv[3]); ext = argv[2]; nomRep = argv[1]; //ouverture du dossier rep = opendir(nomRep); //Test si le dossier s'ouvre correctement if(!rep){ // On signale l'erreur perror("opendir"); } // Tant qu'il ya des fichiers while(ent=readdir(rep)) { // On construit l'adresse du fichier strcpy(nom,nomRep); // Si le fichier est différent de ./ ou ../ if(strcmp(ent->d_name,".") && strcmp(ent->d_name,"..")){ strcat(nom,"/"); strcat(nom,ent->d_name); // On récupère les informations sur le fichier // lstat permet d'éviter de compter les liens symbolique if(lstat(nom,&buf)!=-1){ // Si c'est un fichier if(S_ISREG(buf.st_mode)){ char *tmp = strrchr(ent->d_name,(int)'.'); tmp++; if(strcmp(tmp,ext)==0){ cout << nom << endl; /* // On écrit le chemin dans le tube close(p[0]); write(p[1],&nom,strlength(nom)*sizeof(char)); close(p[1]); */ } } } } } // On ferme le repertoire closedir(rep); }
Partager