Bonjour � tous,

J'ai un comportement des "named pipe" que je ne comprends pas.
Pour cela j'ai fait un petit bout de code sans gestion des erreurs qui est le suivant :

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
int main()
{
	readNamedFifo("myFifo");
	return 0;
}
 
int32_t readNamedFifo(const std::string &path)
{
	int32_t fdFifo = open(path.c_str(), O_RDONLY | O_NONBLOCK);
 
	if (fdFifo >=0)
	{
		char buff[1024]
		int32_t buf_count = read(fdFifo, buff, 4096);
		if (buf_count < 0 && errno != EAGAIN)
		{
			// Une erreur
		}
		else if (buf_count == 0)
		{
			// La fifo est vide
		}
		else
		{
			// Lecture OK
		}
	}
}
Test :
  • Dans terminal1 : mkfifo myFifo
  • Dans terminal2 : je lance mon bout de code et j'ai une fifo vide
  • Dans terminal1 : echo "Test" > myFifo (je n'ai plus la main)
  • Dans terminal2 : je lance mon bout de code et buf_count vaut -1 et errno vaut EAGAIN
  • Dans terminal1 : j'ai de nouveau la main


Mon probl�me vient du "O_NONBLOCK" je pense.

Dans mon cas je veux au final que mon programme surveille une fifo. Lors du d�marrage, si cette derni�re n'est pas vide, il la lit et puis la surveille.

Je ne sais pas si je suis clair.

Merci d'avance pour vos r�ponses.