我需要一个名为SizeOfPipe()的函数,它应该返回管道的大小 - 我只想知道管道中有多少数据,而不是实际从管道本身读取数据.
我认为以下代码可行
fseek (pPipe, 0 , SEEK_END);
*pBytes = ftell (pPipe);
rewind (pPipe);
Run Code Online (Sandbox Code Playgroud)
但是fseek dosent在文件描述符上工作.另一个选择是读取管道然后写回数据但是如果可能的话,我想避免这个,任何建议?
Vol*_*erK 16
根据您的unix实现,ioctl/FIONREAD可能会起作用
err = ioctl(pipedesc, FIONREAD, &bytesAvailable);
除非返回"无效参数"(或任何其他错误)的错误代码,否则bytesAvailable包含当时可用于解除阻塞读取操作的数据量.
通常不可能仅从管道句柄知道可以从管道读取的数据量。数据可能通过网络传入,或者由另一个进程动态生成。如果您需要预先了解,您应该安排信息通过管道或带外发送给您,无论管道另一端的进程如何。