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 endroitdé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
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 #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); }
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
Partager