Bonjour,
toujours un problème de tube nommé.
Le lecteur doit boucler en permanence en attente de messages (le nombre d'octets du message suivi du message lui même) provenant de l'écrivain.
Tout se passe bien au premier message (le read est bloquant) mais le lecteur tourne en boucle par la suite alors que l'écrivain n'a rien écrit de plus. Et le lecteur affiche qu'il a lu 0 octet 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
25
26
27
28
29
30
31
 
#define pipe_appli "pipe_appli"
 
int main()
{
	int fd_fifo, nb;
	mode_t mode = 0600;
	char data[10] = {'\0'};
 
	mkfifo(pipe_appli, mode);
	fd_fifo = open(pipe_appli, O_RDONLY);
	if(fd_fifo < 0)
	{
		perror("open fd_fifo");
		unlink(pipe_appli);
		exit(EXIT_FAILURE);
	}
 
	do
	{
		puts("Waiting for data: ");
		read(fd_fifo, &nb, sizeof(nb));
		nb = read(fd_fifo, data, nb);
		printf("%d octets lus, %s\n", nb, data);
		sleep(1);
	}while(data[0] != '.');
 
	close(fd_fifo);
	unlink(pipe_appli);
	exit(EXIT_SUCCESS);
}
Si l'écrivain envoi le caractère '.', le lecteur sort de la boucle et ferme le tube.
Comment se fait-il que le read du lecteur ne soit plus bloquant alors qu'à priori il a consommer tout ce qu'il y avait à lire?
Merci.