【发布时间】:2015-11-09 12:03:06
【问题描述】:
我正在开发一个以相反顺序生成文件内容的 ANSI C 应用程序。也就是说,文件末尾的字节最先接收,开头的字节最后接收。优选地,由于可能涉及的数据量,我想直接将此数据写入文件,而无需先将其安排在单独的内存缓冲区中。那可能吗?这如何使用 ANSI C 来完成?如果这只能通过不符合 ANSI 的更高级别的库来完成,那是可以接受的。
【问题讨论】:
-
非常有趣的问题!一种解决方法是以反向顺序写入临时文件,然后读取临时文件并以正向顺序重写它。当然,这只是占用您正在谈论的内存缓冲区并使用磁盘代替它。很想看看这个解决方案。
-
我脑海中浮现的第一个想法是先以“相反的顺序”将数据写入临时文件,然后以足够的块大小反向移动到目标文件。
-
你事先知道需要写入多少数据吗?
-
不是 ANSI,但类似这样的简单方法是对文件进行内存映射,因此您可以按照您喜欢的任何顺序写入,在 nix 系统上进行 mmap,完成后截断。
-
哦,天哪,在提供我的第三个想法后我会停止这个(春天累了:)):为您的原始数据使用面向块的文件格式,格式为:
{BlockSize : uint32; ReversedFlag: uint8_t;},后跟BlockSize字节数据的。然后,如果您的消费应用程序不是按顺序访问而是以更随机访问的方式访问,那么您可以选择“懒惰地”反转。 @JimFell 对不起-您对我的第二个回复的竞争条件:(
标签: file-io file-handling ansi-c