Вот что я сделал, и это работает:
псевдокод на стороне сервера (читатель)
mkfifo()
while (true){
open()
select(...NULL)
while (select... timeval(0)) {
read()
}
close()
}
реальный код C на стороне клиента (писатель)
int fd;
char * myfifo = "/tmp/saveterm.fifo";
char *msg = "MESSAGE";
fd = open(myfifo, O_WRONLY);
write(fd, msg, strlen(msg));
close(fd);
Теперь вы видите, что мне нужно открывать / закрывать fifo на сервере после каждого прочитанного события.Это должно быть так?Сначала я открывал его только один раз перед циклом, но после первого сообщения вызов select никогда больше не блокировался до закрытия и повторного открытия и всегда возвращал 1 и ISSET для дескриптора.