You could open()
your pipe O_RDONLY | O_NONBLOCK
, and if you want the C stream, you can get it with fdopen()
. However, there might be a problem with the select()
– AFAIK, a pipe fd open for reading that has no writer is always prepared for reading, and read()
returns 0, so the select()
would fire indefinitely.
A kludgy way of overcoming this would be to open the pipe O_RDWR
; that is, have at least one writer (your C++ program). Which would solve your problem anyway.