私が行っているこの大学のプロジェクト (過去にいくつか投稿したことがあります) は、ある種のソーシャル ネットワークであり、ユーザーがメッセージを交換する機能が必要です。
最初に、すべてのメッセージをリンク リストに保持するようにデータ構造を設計し、メッセージ サイズを 256 文字に制限しました。ただし、メッセージをディスクに保存し、必要なときにのみ読む方が、講師の好みになると思います。もちろん、彼らは彼らが何を好むかは言いません。
覚えておくべきことの 1 つは、各ユーザーからの最新の 20 件のメッセージを保存するだけでよく、それ以上保存する必要はないということです。
現在、受信トレイとして機能するハッシュ テーブルがあり、これはユーザー プロファイル内にあります。このハッシュ テーブルは、名前 (メッセージを送信したユーザー) によってインデックスが作成されます。各要素の値は、20 個のsize_t
要素 (上で述べたように 20 個のメッセージ) の配列を保持するデータ構造になります。アイデアは、ディスク ファイルのオフセットと書き込まれたバイトを追跡することです。次に、メッセージを読み取る必要がある場合はfseek()
、必要なバイトを使用して読み取るだけです。
これはうまくいくと思います...ネットワーク内のすべてのユーザーからのすべてのメッセージを保持するために、1 つのファイルだけを使用できます。同僚が各ユーザーからのメッセージを個別に保存することについてインストラクターに尋ねたので、ファイルシステムに制限があるため、それは最善のアプローチではない可能性があると答えたので、1つのファイルと言っています。だからこそ、私はシングルファイルルートに行くことを考えています。
ただし、これには問題があります...最新の 20 件のメッセージのみを保存する必要があるため、この制限に達すると古いメッセージを破棄する必要があります。
これを行う方法がわかりません...私が知っているのはfread()
、fwrite()
ファイルとの間でバイトを読み書きすることだけです。ファイルオフセットに移動して、「ねえ、次のXバイトを削除してください」と言うにはどうすればよいですか? それができたとしても、別の問題があります...それより下のすべてのオフセットは完全に異なり、問題を解決するにはすべてのユーザーのメールボックスを処理する必要があります。どれが苦痛だろう...
それで、私の問題を解決するための提案はありますか?何を指示してるんですか?