Bonjour,


je suis nouveau sur ce forum, je le connais depuis assez longtemps mais je ne sais pas si j'ai posté mon message au bon endroit désolé si ce n'est pas le cas.

Voici mon problème :

J'ai un programme prog qui lit sur le fichier standard d'entrée, numdescripteur 0,un nom (que l'utilisateur tape sur le clavier) puis il l'affiche sur l'écran donc numdescripteur 1.

J'ai un deuxième programme qui créer un fils via fork() puis le fils doit exécuter "prog" en redirigeant son entrée vers un fichier "Donnees.txt" (par exemple) puis sa sortie vers un autre fichier "Resultat.txt" (par exemple).

Donc plus clairement :

Le pere créer un fils, le fils redirige les fichiers standard d'entrée et sortie du prog qui l'éxécute via execlp.

J'ai deja fait un le programme :

Contenu du prog.C

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
 
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
int main(){
 
    char nom[40];
    int nbOcLus;    
 
    write(0,"Votre nom ?\n",13);
    nbOcLus=read(0,&nom,40);
 
    //écriture du nom qu'on a lu sur le clavier
    write(0,"Bonjour \n",10);
    write(0,&nom,nbOcLus);
 
    exit (0);
}
voici le code du programme qui créer le fils et qui doit rediriger les entrées / sorties du prog

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
 
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
#include <sys/wait.h>
 
void mess(char*,int);
 
int main(){
 
pid_t idp;
int nbOctLus,numDesc,numIn;
char buffer[50];
 
numDesc=open("donnees.txt", O_RDONLY, 0644); //ouverture fichier
numIn=open("Resultat.txt", O_RDWR | O_CREAT | O_APPEND, 0644); //ouverture fichier résultat
 
if(numIn==-1){
    mess("Probleme ouverture fichier Resultat \n",2);
    exit(1);
    }
 
if(numDesc==-1){
    mess("Probleme ouverture fichier donnees \n",2);
    exit(1);
    }
 
idp=fork(); //création du fils
 
 
if(idp==-1) {
	mess("Probleme fork",2);
	exit(-1);
	}
 
if(idp==0){
 
        dup2(numDesc,0);
        close(numDesc);
        dup2(numIn,1);
       close(numIn);
	execlp("prog","prog",NULL);
 
	mess("probleme exec",2);
 
	exit(2);
	}
 
wait(NULL);
 
exit(0);
}
 
void mess(char *m,int numDescripteur){
    write(numDescripteur,m,strlen(m));
}

A l'éxécution je n'ai aucun message, je regarde le contenu de résultat.Txt : VIDE

Contenu de donnees : lol



voila j'espère que j'ai été assez clair pour que vous puissiez m'aider, merci d'avance


AllyKo