我需要一个名为SizeOfPipe()的函数,它应该返回管道的大小 - 我只想知道管道中有多少数据,而不是实际从管道本身读取数据.
我认为以下代码可行
fseek (pPipe, 0 , SEEK_END); *pBytes = ftell (pPipe); rewind (pPipe);
但是fseek dosent在文件描述符上工作.另一个选择是读取管道然后写回数据但是如果可能的话,我想避免这个,任何建议?
根据您的unix实现,ioctl/FIONREAD可能会起作用
err = ioctl(pipedesc, FIONREAD, &bytesAvailable);
除非返回"无效参数"(或任何其他错误)的错误代码,否则bytesAvailable包含当时可用于解除阻塞读取操作的数据量.
某些UNIX实现返回st_size
调用后可在字段中读取的字节数fstat()
,但这不可移植.