Създадох 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(), за да направя read() неблокиращ.
Сега бих искал да направя няколко (интензивни процесора) изчисления от страна на запис, но САМО ако има прикачен четец.
Поради това трябва да намеря начин от страната на запис, за да открия дали FIFO е отворен за четене някъде другаде.
Някой има ли идея как да се постигне това?
O_RDWR
(между другото не еPOSIX
) - person Anton Kovalenko   schedule 28.01.2013open("fifo", O_WRONLY | O_NONBLOCK)
? Това ще се провали сENXIO
, ако няма четци. - person melpomene   schedule 28.01.2013