File io 如何以相反的顺序写入文件

File io 如何以相反的顺序写入文件,file-io,file-handling,ansi-c,File Io,File Handling,Ansi C,我正在开发一个ANSI C应用程序,它以相反的顺序生成文件内容。也就是说,首先接收文件末尾的字节,最后接收文件开头的字节。最好是,由于可能涉及的数据量,我希望直接将这些数据写入文件,而不首先将其安排在单独的内存缓冲区中。可能吗?如何使用ANSI C实现这一点?如果这只能通过一个不符合ANSI标准的更高级别的库来实现,那么这是可以接受的。解决这个问题的方法实际上比我最初想象的要简单得多。我可以使用fseek将文件指针移动到文件末尾,然后在每次写入时通过文件递增地向后移动(减少文件指针索引)。非常有

我正在开发一个ANSI C应用程序,它以相反的顺序生成文件内容。也就是说,首先接收文件末尾的字节,最后接收文件开头的字节。最好是,由于可能涉及的数据量,我希望直接将这些数据写入文件,而不首先将其安排在单独的内存缓冲区中。可能吗?如何使用ANSI C实现这一点?如果这只能通过一个不符合ANSI标准的更高级别的库来实现,那么这是可以接受的。

解决这个问题的方法实际上比我最初想象的要简单得多。我可以使用
fseek
将文件指针移动到文件末尾,然后在每次写入时通过文件递增地向后移动(减少文件指针索引)。

非常有趣的问题!一种解决方法是,以相反的顺序写入临时文件,然后读取临时文件,并以相反的顺序重写它。当然,这只需要占用您所说的内存缓冲区,并使用磁盘来代替它。我很想看看这个问题的解决方案。我想到的第一个想法是先以“相反的顺序”将数据写入临时文件,然后以适当的块大小从后向前移动到目标文件。你事先知道需要写入多少数据吗?不是ANSI,但对于类似的事情,最简单的方法是内存映射文件,这样你就可以在nix系统上以你喜欢的任何顺序编写mmap,完成后进行截断。哦,天哪,我在提出我的第三个想法(spring Thread:)后将停止此操作:对原始数据使用面向块的文件格式,格式为:
{BlockSize:uint32;ReversedFlag:uint8\u t;}
后跟数据的
块大小
字节。如果您的消费应用程序不是按顺序访问,而是以更随机的方式访问,那么您可以选择“延迟”反转@JimFell抱歉-比赛条件,请回复我的第二条:(