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 :
Test :
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 } } }
- 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.
Partager