[LCP]stat'ing a FIFO
Robert Wuest
rwuest at wuest.org
Thu Jul 26 04:51:04 UTC 2001
Steve,
I knew that! :) Or I should have known that. Or I did once upon a time.
Thank you very much!
Robert
Steve Baker wrote:
>
> Robert Wuest <rwuest at wuest.org> wrote:
> > Can anyone tell me how to stat a FIFO? In a program 1, I pipe() twice,
> > then fork. In the child, I dup() the appropiate fd's to stdin and
> > stdout, and exec program 2. Normal stuff. In either program:
> >
> > struct stat stat_buf;
> > fstat( fd, &stat_buf ); // fd = 0 or 1 in program 2's case
> >
> > always has 0 for the size, stat_buf.st_size. Even when I know there is
> > unread data in there. Read or write. Is there some other trick I need
> > to know?
>
> I believe what you're looking for is the FIONREAD ioctl(), thus:
>
> int n;
> ...
> ioctl(fd,FIONREAD,&n);
>
> /*
> * n now contains the number of bytes available for reading on the
> * descriptor fd.
> */
>
> > Also, is there anyway to get a signal when there is data to be read?
>
> SIGIO is supposed to be for that, but I've never used it, and don't know if
> it even works. I think it might be limited to tty I/O events.
>
> - Steve
More information about the linuxCprogramming
mailing list