相关疑难解决方法(0)

在前面截断文件

我最近工作的一个问题让我希望我可以丢掉文件的正面.如果你愿意,有点像"前面的截断".在后端截断文件是一种常见的操作 - 我们做的事情甚至没有考虑太多.但是砍掉文件的正面?起初听起来很荒谬,但这只是因为我们受过训练才认为这是不可能的.但是在某些情况下,垂直操作可能很有用.

一个简单的例子(当然不是唯一或必然是最好的例子)是FIFO队列.您正在将新项目添加到文件末尾,并从前面将项目从文件中提取出来.文件随着时间的推移而增长,前面有一个巨大的空白空间.对于当前的文件系统,有几种解决此问题的方法:

  • 删除每个项目后,将其余项目复制以替换它,并截断该文件.虽然它有效,但这种解决方案在时间上非常昂贵.
  • 监视前面空白区域的大小,当它达到整个文件大小的特定大小或百分比时,向上移动所有内容并截断文件.这比以前的解决方案更有效,但仍然需要花费时间在文件中移动项目.
  • 在文件中实现循环队列,在删除项目时将新项添加到文件前面的孔中.这可能非常有效,特别是如果您不介意队列中出现故障的可能性.如果你关心订单,就有可能不得不移动物品.但一般来说,循环队列很容易实现并很好地管理磁盘空间.

但是如果有一个lop操作,从队列中删除一个项目就像更新文件开头标记一样简单.事实上,就像截断文件一样简单.那么,为什么没有这样的操作呢?

我对文件系统实现有一点了解,并且没有看到任何特殊原因这很难.它看起来像所有它需要的是另一个单词(dword,也许?)每个分配条目,以说明文件在块中的开始位置.对于1美元以下100美元以下的驱动器,这样的功能似乎是一个相当小的代价.

如果您可以像在最后截断那样有效地删除文件的前面,那么还可以使其他任务变得更容易?

你能想到这个功能无法添加到现代文件系统的任何技术原因吗?其他非技术原因?

filesystems

18
推荐指数
2
解决办法
7049
查看次数

删除文件的开头而不重写整个文件

我有一个嵌入式Linux系统,它将数据存储在一个非常大的文件中,并将新数据附加到最后.随着文件大小增加到填充可用存储空间附近,我需要删除最旧的数据.

问题是,我不能真正接受将大量数据"移动"到文件中所需要的中断,就像正常一样 - 将文件锁定一段时间只是为了重写它(加上这是一个闪存介质) ,这会对闪光灯造成不必要的磨损).

可能最简单的方法是将文件拆分成多个较小的文件,但这有几个与数据处理和处理方式相关的缺点 - 所有"客户端"软件都需要单个文件.OTOH它可以处理将第一个记录减半的'腐败',因此文件不需要在记录偏移处进行修整,只需"在那里某处",例如,前几个iNode被释放.无论如何,最旧的数据已经过时,因此文件开头的更严重的损坏是完全可以接受的,只要"尾巴"保持清洁,并且可以采取多少精确删除的自由 - "大约几个第一兆字节"是可以的,无需'先精确4096KB'精度.

是否有一些方法,API,技巧,黑客来截断这样的文件的开头?

c c++ linux file-io

18
推荐指数
2
解决办法
2014
查看次数

如何用很少的备用磁盘空间连接两个巨大的文件?

假设您有两个要连接在一起的大文件(几GB),但是你有很少的备用磁盘空间(比方说几百MB).也就是说,给定file1file2,你想用一个单一的文件,该文件是串联的结果落得file1file2共同字节的字节,并删除原始文件.

你无法做到这一点cat file2 >> file1; rm file2,因为在这两个操作之间,你的磁盘空间不足.

欢迎使用免费或非免费工具在任何和所有平台上提供解决方案; 这是我在前几天下载Linux ISO时想到的一个假设性问题,由于无线打嗝导致下载中途中断.

filesystems concatenation large-files

8
推荐指数
3
解决办法
3452
查看次数

在 unix shell 中删除一个非常大的文件的前 n 个字符

我有一个大文本文件(~3GB)。在创建它时,我犯了一个错误,只有第一行前几个(不是全部)字符是错误的。第一行中的其余字符是正确的。所有其他行也是正确的。我的,很简单,问题是:

如何删除这么大文件的前 n 个字符?我不想删除整个第一行,删除前 n 个字符。我的要求是:

  1. 不替换所有剩余的行。
  2. 无需阅读整个文件。
  3. 理想情况下,使用 unix shell 命令。

我试过 sed,但它替换了第一行并复制了所有其余的行……也许我可以使用“退出”选项?当然,我可以再次创建文件,而不会犯那个错误......

unix shell sed

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

标签 统计

filesystems ×2

c ×1

c++ ×1

concatenation ×1

file-io ×1

large-files ×1

linux ×1

sed ×1

shell ×1

unix ×1