当前位置:  开发笔记 > 编程语言 > 正文

在不调用read()的情况下确定管道的大小

如何解决《在不调用read()的情况下确定管道的大小》经验,为你挑选了2个好方法。

我需要一个名为SizeOfPipe()的函数,它应该返回管道的大小 - 我只想知道管道中有多少数据,而不是实际从管道本身读取数据.

我认为以下代码可行

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

但是fseek dosent在文件描述符上工作.另一个选择是读取管道然后写回数据但是如果可能的话,我想避免这个,任何建议?



1> VolkerK..:

根据您的unix实现,ioctl/FIONREAD可能会起作用

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

除非返回"无效参数"(或任何其他错误)的错误代码,否则bytesAvailable包含当时可用于解除阻塞读取操作的数据量.



2> CL...:

某些UNIX实现返回st_size调用后可在字段中读取的字节数fstat(),但这不可移植.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有