對於這個大學項目,我正在做這些工作(我過去曾經發表過幾篇文章),這是一種社交網絡,它需要用戶交換消息的能力。首先,我設計了我的數據結構來保存鏈接列表中的所有消息,將消息大小限制爲256個字符。但是,我認爲我的導師會更喜歡將信息保存在磁盤上,並只在需要時纔讀取它們。當然,他們不會說出他們喜歡的東西,我需要做出選擇併爲我能走上最佳路線辯護。很多關於文件I/O的問題(讀/寫信息字符串)
有一點要記住,我只需要保存來自每個用戶的最新20條消息,不再需要。
現在我有一個哈希表,它將充當收件箱,這將在用戶配置文件中。該哈希表將按名稱(發送消息的用戶)編入索引。每個元素的值將是一個數據結構,其中包含具有20個元素的size_t
的數組(像上面所述的20條消息)。這個想法是跟蹤磁盤文件偏移和寫入的字節。然後,當我需要閱讀消息時,我只需要使用fseek()
並讀取必要的字節。
我認爲這可以很好地工作......我只能用一個文件來保存來自網絡中所有用戶的所有消息。我是在說一個文件,因爲一位同事問一位講師關於獨立保存每個用戶的消息,他回答說,這可能不是最好的方法,因爲文件系統有限制。這就是爲什麼我想要去單一文件路線。
但是,這提出了一個問題...因爲我只需要保存最新的20條消息,所以當我達到此限制時,我需要丟棄較舊的消息。
我不知道如何做到這一點...我所知道的全部是關於fread()
和fwrite()
來讀取/寫入文件的字節。我怎麼去一個文件偏移量,並說「嘿,刪除下面的X字節」?即使我可以做到這一點,還有一個問題......低於這一點的所有偏移將完全不同,我將不得不處理所有用戶郵箱來解決問題。這將是一個痛苦...
那麼,有什麼建議來解決我的問題?你有什麼建議?
這就是我的想法......我不喜歡使用固定長度的消息。最大值是256,但如果消息是簡單的「你好,你在幹什麼?」我不想寫256個字節。我被允許使用這樣的外部庫。這將打敗目的... – 2010-04-12 00:43:29