Le but est de compiler la liste du main paramétré.
Le parallélisme ici n'est pas obligatoire et je dirais même limite inutile, mais c'est dans ma consigne donc on fait avec^^
changerExtension est une fonction qui va faire la conversion de fichier.c à fichier.o dans mon cas.
Le détail de cette fonction se trouve en bas si besoin
Le vrai problème se situe donc sur mon main.
Il semblerait que la première étape fonctionne bien puisque je retrouve bien mes .o.
En revanche la seconde étape semble...ne rien faire tout simplement...même pas de message d'erreur...
Mes erreurs sont supposé s'écrire dans un fichier puisque je fais une redirection.
- Code: Tout sélectionner
int main(int argc, char const *argv[])
{
int nbFich;
pid_t pid[NB_FICH_MAX];
int k;
int err;
int fd;
char* arg[NB_FICH_MAX];
int k3=0;
if(argc==1){
Erreur("Nombre d'arguments incorrect",50);
}else{
//au moins un fichier à compiler
nbFich=argc-1;
//on crée nbFIch fils
err=dup(2);//save erreur
close(2);
if((fd=open("FichierErreur.err",O_WRONLY | O_CREAT,S_IRWXU))==-1){
Erreur("Ouverture fichier écriture",52);
}else{
dup(fd);
//fd va dans 2
}
for(k=0;k<nbFich;k++){
switch(pid[k]=fork()){
case -1:
Erreur("fork",51);
case 0:
execlp("cc","cc","-c",argv[k+1],NULL);
default:
if(k==(nbFich-1)){//si on est sur le dernier process
wait(NULL);
//on att que le dernier cc soit effectué
int k2;
for(k2=0;k2<nbFich;k2++){
arg[k3]=changerExtension(argv[k2+1],"o");
k3++;
}
execv("cc",arg);
close(fd);
dup(err);
}
}
}
}
return 0;
}
Si vous voyez ce qui peut causer le soucis...après exécution. Les fichiers .o sont bien là mais je n'ai pas de a.out. Donc la seconde partie ne se fait pas...mais pourtant je n'ai pas d'erreur dans mon fichier d'erreur.
- Code: Tout sélectionner
char* changerExtension(const char* fich, const char* extension){
int k;
int k2=0;
int extensionPast=0;
char* newFile="";
char* fich2="";
char* ext2="";
fich2= malloc (50 * sizeof(char));
newFile = malloc (50 * sizeof(char));
ext2 = malloc (50 * sizeof(char));
strcat(fich2,fich);
strcat(ext2,extension);
for(k=0;k<strlen(fich);k++){
if(fich2[k]=='.'){
extensionPast=1;
newFile[k2]=fich2[k];
k2++;
}else{
if(extensionPast==0){
newFile[k2]=fich2[k];
k2++;
}
}
}
strcat(newFile,ext2);
return newFile;
}