对于我正在做的这个大学项目(我过去曾为此发过几篇文章),这是某种社交网络,它需要用户交换消息的能力。
起初,我将数据结构设计为将所有消息保存在一个链表中,将消息大小限制为 256 个字符。但是,我认为如果我将消息保存在磁盘上并仅在需要时阅读它们,我的老师会更喜欢它们。当然,他们不会说他们喜欢什么,我需要做出选择并尽我所能证明我为什么走那条路。
要记住的一件事是,我只需要保存来自每个用户的最新 20 条消息,不再需要了。
现在我有一个哈希表作为收件箱,这将在用户配置文件中。此哈希表将按名称(发送消息的用户)进行索引。每个元素的值将是一个数据结构,包含一个包含 20 个元素的数组size_t
(如我上面所说的 20 条消息)。这个想法是跟踪磁盘文件的偏移量和写入的字节数。然后,当我需要读取消息时,我只需要使用fseek()
和读取必要的字节即可。
我认为这可以很好地工作......我可以只使用一个文件来保存来自网络中所有用户的所有消息。我说的是一个文件,因为一位同事问一位讲师关于独立保存每个用户的消息,他回答说这可能不是最好的方法,因为文件系统有它的限制。这就是为什么我正在考虑采用单文件路线。
但是,这带来了一个问题......因为我只需要保存最新的 20 条消息,所以当我达到这个限制时,我需要丢弃旧的消息。
我不知道该怎么做......我所知道的只是fread()
从fwrite()
文件读取/写入字节。如何转到文件偏移量并说“嘿,删除以下 X 个字节”?即使我能做到这一点,还有另一个问题......低于那个偏移量的所有偏移量都将完全不同,我必须处理所有用户邮箱来解决问题。那会很痛苦...
那么,有什么建议可以解决我的问题吗?你有什么建议?