Bonjour,
je fais communiquer deux processus par tube nommé.
Le processus lecteur:
Le processus écrivain:
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 int main() { int retour, fd, nb; char data; retour = mkfifo("canal.fifo", 0600); if(retour < 0) { perror("mkfifo"); exit(EXIT_FAILURE); } fd = open("canal.fifo", O_RDONLY); if(fd < 0) { perror("open"); exit(EXIT_FAILURE); } printf("Le consommateur lit...\n"); do { nb = read(fd, &data, 1); if(nb > 0) printf("%c", data); }while(nb > 0); close(fd); unlink("canal.fifo"); exit(EXIT_SUCCESS); }
Cela fonctionne à ceci près qu'il faut que je quitte l'écrivain qui fait donc un close(fd) pour que le lecteur soit débloquer de son read() et lise toutes les données accumulées dans le tube.
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 int main() { int fd; char msg[64]; fd = open("canal.fifo", O_WRONLY); if(fd < 0) { perror("open"); exit(EXIT_FAILURE); } do { puts("Entrez un message: "); scanf("%s", msg); while(getchar() != '\n'); if(msg[0] == 'q') break; write(fd, msg, strlen(msg)+1); }while(1); close(fd); exit(EXIT_SUCCESS); }
Est-ce qu'il faut flusher après un write() ou ai-je mal écrit?
Merci.
Partager