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);
 
}