Bonjour,
je dois développer un programme qui exécute la copie de fichiers en parallèle (avec des processus fils et non des threads). Ca fonctionne couci-couca, étant donné que ce sont des relations père-fils, je ne peux pas utiliser de boucle mais une récursivité, si je ne me trompe pas?

Donc en gros, l'utilisateur lancera le programme: ./copie texte1.txt texte2.txt texte3.txt

Le premier fils s'occupe de la copie du fichier texte1.txt, le 2ème texte2.txt,...

Tous utilisent la fonction copie.

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
int traitement(int debut,int argc, char *argv[]){
  int p = fork();
  if (p == -1){
    perror("Erreur de fork()");
  }
  if (p == 0){
    printf("%d %s\n",debut,argv[debut]);
    copie(argv[debut]);
  }
  else{
    debut ++;
    if (debut < argc){
      traitement(debut,argc,argv);
    }
    else{
      return 0;
    }
  }
  return -1; //erreur
}
 
int main(int argc, char * argv[]){
  if (argc <= 2){
    perror("Entrez au moins un argument!");
  }
  else{
    if (traitement(1,argc,argv) ==0 ){
      wait(0);
    }
    else{ 
      perror("Erreur de traitement");
      return -1;
    }
  }
  return 0;
}
Les copies ont bien lieu mais je ne comprends pas bien le retour qu'il me fait:
./ex2 texte.txt texte2.txt texte3.txt
1 texte.txt
2 texte2.txt
Erreur de traitement: Success
3 texte3.txt
Erreur de traitement: Success
Erreur de traitement: Success
Erreur de traitement: Success
Pourquoi revient-il dans le main tant qu'il n'a pas fini?

Merci d'avance

Edit: en fait j'ai compris, c'est le return -1 quand le fils s'exécute. Où pourrais-je mettre ce retour d'erreur ? Est-ce que ce code est acceptable?