Alex Rivera | Logout

Determine the size of a pipe without calling read()

Asked 2008-09-16T12:47:04.467
11

I need a function called SizeOfPipe() which should return the size of a pipe - I only want to know how much data is in the pipe and not actually read data off the pipe itself.

I thought the following code would work:

fseek (pPipe, 0 , SEEK_END);
*pBytes = ftell (pPipe);
rewind (pPipe);

but fseek() doesn't work on file descriptors. Another option would be to read the pipe then write the data back but would like to avoid this if possible. Any suggestions?

Edit
Report

1 Answer

22

Depending on your unix implementation ioctl/FIONREAD might do the trick

err = ioctl(pipedesc, FIONREAD, &bytesAvailable);

Unless this returns the error code for "invalid argument" (or any other error) bytesAvailable contains the amount of data available for unblocking read operations at that time.

answered 2008-09-16T13:10:04.990

Your Answer