2016-07-20 6 views
0

プログラムがファイルに書き込むローカルチャットプログラムを作成していて、他の人がファイルを編集しているかどうかを確認します。私はファイルをちょうど良い下に追加しています。しかし、ファイルが読み込まれると、ファイルが最初に開かれたときの様子だけが表示されます。 私はbuffer = fopen("buffer.txt", "r+");を使用してファイルを開きます。C - テキストファイルに加えられた変更は、プログラムがファイルを読むときに気付かれません。

マイ読み取りアルゴリズムは次のようになります。

それは関数が呼び出される毎回ファイルの最新バージョンを読み取るように私は、ファイルを更新するにはどうすればよい
void bufread(){ 
    //READING BUFFER 
    fseek(buffer, -1-strlen(nick), SEEK_END); 
    fgets(readbuf, 0x5FF, buffer); 
    removeChar(readbuf, '\n'); 
    if (strcmp(readbuf, nick) == 0) 
     ; 
    else{ 
     i = 0; 
     strcpy(prevbuf, globalline); 
     while(c != '\n'){ 
      fseek(buffer, -2, SEEK_CUR); 
      c = getc(buffer); 
      i++; 
     } 
     fgets(globalline, i, buffer); 
     printf("%s\n", globalline); 
    } 
} 

編集:私はそれを理解しました。 whileループは、cが改行ではなく、cが改行のときにも停止します。私はcをリセットしなかったので、それは改行を維持しているので、whileループは実行されません。

+0

現時点では未知数が多すぎるため、[mcve]が必要です。 – KevinDTimm

+0

ファイルを開く方法を表示する必要があります。 – stark

+0

あなたの質問が正しく理解されていれば、読者のために「開かれている」ファイルを変更している人がいます。実行中のプログラムに最新のファイル内容を表示させるには、ファイルを閉じてから再度開きます。 – user3629249

答えて

0

fgetsなどのバッファ入力。彼らはファイルの終わりを見つけて、それを過去に読むことができないかもしれません。たとえば、ファイルを再度開くことができます。また、「fseek」を使用すると、前回の位置に移動できます。または、パイプやソケットなどの別のメカニズムを使用することもできます。

+0

ファイルを再オープンしようとしました。それはまったく状況を変えなかった。 – picklesrevil

+0

ファイルを開いて変更が見られなかった場合は、変更が書き込まれていないことを意味します。あなたは他のプロセスから新しい値を書き込んでもよろしいですか?バッファリングについて覚えておいて、他のプロセスからfclose()またはfflush()を呼び出すか、ディスクに書き込んだものをフラッシュする必要があります。 – Alex

関連する問題