この方法で非ブロッキング書き込みを実行できる 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() をノンブロッキングにします。
ここで、書き込み側でいくつかの (CPU を集中的に使用する) 計算を行いたいと思いますが、リーダーが接続されている場合のみです。
そのため、FIFO が別の場所で読み取り用に開かれているかどうかを検出するために、書き込み側で方法を見つける必要があります。
これを達成する方法を知っている人はいますか?