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.