相关疑难解决方法(0)

截断linux中的第一个100MB文件

我指的是你怎么能用很少的备用磁盘空间连接两个巨大的文件?

我正在实施以下内容:

  1. 分配组合大小的稀疏文件.
  2. 将100Mb从第二个文件的末尾复制到新文件的末尾.
  3. 截断第二个文件末尾的100Mb
  4. 循环2和3,直到完成第二个文件(将2.修改为目标文件中的正确位置).
  5. 做第2和第3和第4,但使用第一个文件.

我想知道是否有人能够"截断"linux中的给定文件?截断是按文件大小,例如,如果文件是10GB,我想截断文件的前100MB,并保留文件剩余9.9GB.有人可以帮忙吗?

谢谢

linux merge truncate file

18
推荐指数
4
解决办法
1万
查看次数

如何使用文件实现循环缓冲区?

我的应用程序(C程序)打开两个文件句柄到同一个文件(一个在写入,一个在读取模式).应用程序中的两个独立线程读取和写入文件.这很好用.由于我的应用程序在具有有限ram磁盘大小的嵌入式设备上运行,我希望写入FileHandle在达到最大大小时包装到文件的开头,并且读取FileHandle像循环缓冲区一样.我从这个问题的答案中理解这应该有效.但是,只要我fseek写入FileHandle文件的开头,就会fread返回错误.将EOF得到做重置fseek文件的开头?如果是这样,应该使用哪个函数使写入文件位置设置为0而不导致EOF重置.

编辑/更新:我尝试了几件事:


  1. 基于@neodelphi我使用管道这是有效的.但是我的用例需要我写入文件.我收到多个直播视频监控流通道,需要存储到硬盘中,并且还可以读回解码并在监视器上显示.

  2. 感谢@Clement关于做ftell的建议我修复了我的代码中的几个错误并为读者包装工作但是,读取的数据似乎是陈旧的数据,因为写入仍然被缓冲,但读者从硬盘读取过时的内容.由于性能方面的考虑,我无法避免缓冲(我需要将32Mbps的实时数据写入硬盘).我已经尝试过像刷写一样的时间,从写入包装到读取包装和读取包装后截断文件(ftruncate)的时间间隔,但这并不能解决过时的数据问题.

  3. 我试图以乒乓球方式使用两个文件,看看这是否解决了这个问题,但想知道是否有更好的解决方案

c embedded file-io

6
推荐指数
1
解决办法
5010
查看次数

标签 统计

c ×1

embedded ×1

file ×1

file-io ×1

linux ×1

merge ×1

truncate ×1