/* Open the FIFO for read so that the subsequent open for write
* doesn't immediately fail. */
read_fd = open(path, O_RDONLY | O_NONBLOCK);
if (read_fd < 0) {
llapi_error(LLAPI_MSG_ERROR, errno,
"cannot open(%s) for read", path);
return -errno;
}
/* Open the FIFO for writes, but don't block on waiting
* for a reader. */
llapi_hsm_event_fd = open(path, O_WRONLY | O_NONBLOCK);
if (llapi_hsm_event_fd < 0) {
llapi_error(LLAPI_MSG_ERROR, errno,
"cannot open(%s) for write", path);
return -errno;
}
/* Now close the reader. An external monitoring process can
* now open the FIFO for reads. If no reader comes along the
* events are lost. NOTE: Only one reader at a time! */
close(read_fd);