Je veux créer un programme simple, cette branche, et l'enfant écrit dans le canal nommé et le parent lit et affiche à partir du canal nommé. Le problème est qu'il entre dans le parent, fait le premier printf et puis il devient bizarre, il ne fait rien d'autre, ne parvient pas à la deuxième printf, juste des façons d'entrer dans la console.C Tuyau nommé (fifo). Le processus parent est bloqué
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void main()
{
char t[100];
mkfifo("myfifo",777);
pid_t pid;
pid = fork();
if (pid==0)
{
//execl("fifo2","fifo2",(char*)0);
char r[100];
printf("scrie2->");
scanf("%s",r);
int fp;
fp = open("myfifo",O_WRONLY);
write(fp,r,99);
close(fp);
printf("exit kid \n");
exit(0);
} else
{
wait(0);
printf("entered parent \n"); // <- this it prints
// whats below this line apparently its not being executed
int fz; printf("1");
fz = open("myfifo",O_RDONLY); printf("2");
printf("fd: %d",fz);
char p[100];
int size;
printf("------");
//struct stat *info;
//stat("myfifo",info); printf("%d",(*info).st_size);
read(fz,p,99);
close(fz);
printf("%s",p);
printf("exit"); exit(0);
}
}
j'ouvre le FIFO mais je le ferme dans le même processus. donc ça ne devrait pas bloquer. et j'ai BESOIN que mon parent attende après son enfant, parce que l'enfant reçoit des entrées, et je ne peux pas ne pas attendre sur la première ligne du parent parce que cela signifierait commencer à lire du fifo, quand je n'ai même pas fini pour écrire dessus – Blitzkr1eg
maintenant j'ai: char c [2]; c [1] = 0; c [0] = 0; c [0] = strlen (r); // c [0] est disons 4 écrivent (fp, c, 1); // fp est le FIFO puis dans un autre processus: // pipe ouverte, je vérifie les erreurs, mais il n'y a pas d'erreur, donc ça ouvre bien char c [2]; c [1] = 0; c [0] = 0; lu (fz, c, 1); // fz est le canal // et maintenant c [0] vaut 0 au lieu de ce qu'il devrait être, 4 – Blitzkr1eg
Il peut être difficile de suivre les changements de code décrits dans les commentaires. Vous feriez mieux de modifier votre question pour montrer ce que vous avez essayé. J'ai ajouté un exemple à ma réponse qui devrait vous aider. – jschmier