Я создал FIFO, в который я могу выполнять неблокирующие записи следующим образом:
// others, searching for a non-blocking FIFO-writer may copy this ;-)
mkfifo("/tmp/myfifo", S_IRWXU);
int fifo_fd = open("/tmp/myfifo", O_RDWR);
fcntl(fifo_fd, F_SETFL, fcntl(fifo_fd, F_GETFL) | O_NONBLOCK);
// and then in a loop:
LOGI("Writing into fifo.");
if (write(fifo_fd, data, count) < 0) {
LOGE("Failed to write into fifo: %s", strerror(errno));
}
Неблокирующая запись работает идеально.
С другой стороны, я открываю FIFO для чтения и выполняю ту же функцию fcntl(), чтобы сделать чтение() неблокирующим.
Теперь я хотел бы сделать несколько вычислений (нагружающих ЦП) на стороне записи, но ТОЛЬКО при наличии подключенного ридера.
Поэтому мне нужно найти способ на стороне записи, чтобы определить, открыт ли FIFO для чтения где-то еще.
Кто-нибудь знает, как этого добиться?
O_RDWR
(кстати, это неPOSIX
) - person Anton Kovalenko   schedule 28.01.2013open("fifo", O_WRONLY | O_NONBLOCK)
? Это не удастся сENXIO
, если нет читателей. - person melpomene   schedule 28.01.2013