我正在实施以下内容:
我想知道是否有人能够"截断"linux中的给定文件?截断是按文件大小,例如,如果文件是10GB,我想截断文件的前100MB,并保留文件剩余9.9GB.有人可以帮忙吗?
谢谢
我的应用程序(C程序)打开两个文件句柄到同一个文件(一个在写入,一个在读取模式).应用程序中的两个独立线程读取和写入文件.这很好用.由于我的应用程序在具有有限ram磁盘大小的嵌入式设备上运行,我希望写入FileHandle在达到最大大小时包装到文件的开头,并且读取FileHandle像循环缓冲区一样.我从这个问题的答案中理解这应该有效.但是,只要我fseek写入FileHandle文件的开头,就会fread返回错误.将EOF得到做重置fseek文件的开头?如果是这样,应该使用哪个函数使写入文件位置设置为0而不导致EOF重置.
编辑/更新:我尝试了几件事:
基于@neodelphi我使用管道这是有效的.但是我的用例需要我写入文件.我收到多个直播视频监控流通道,需要存储到硬盘中,并且还可以读回解码并在监视器上显示.
感谢@Clement关于做ftell的建议我修复了我的代码中的几个错误并为读者包装工作但是,读取的数据似乎是陈旧的数据,因为写入仍然被缓冲,但读者从硬盘读取过时的内容.由于性能方面的考虑,我无法避免缓冲(我需要将32Mbps的实时数据写入硬盘).我已经尝试过像刷写一样的时间,从写入包装到读取包装和读取包装后截断文件(ftruncate)的时间间隔,但这并不能解决过时的数据问题.
我试图以乒乓球方式使用两个文件,看看这是否解决了这个问题,但想知道是否有更好的解决方案