テキストファイルへ半永久的に出力し続けることは可能でしょうか。
こんにちは。いつもお世話になっております。
C言語で、半永久的に文字列をテキストファイルに出力し続ける、という事は可能でしょうか。要は、ファイルを無限に更新し続けるプログラムを書きたいと考えています。元のファイル(file.txt)の文字列を、形式を変えて、別のファイル(out.txt)に出力し続けたいのですがどうしても出力が止まってしまい上手くいきません。自分なりに以下のようなプログラムを作ってみました。何かアドバイスを頂けないでしょうか。
前提条件:
・別プログラムによりfile.txtは末尾に文章が追加され続けている
・本プログラムは半永久的に動き続ける
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<signal.h>
#include<sys/types.h>
int
main ()
{
int i = 0, j = 0, len;
FILE *fp, *fp2;
char buf[1024] = "";
char str[1024] = "";
while (1)
{
//ループ2周目以降なら一度クローズして開き直す
if (i >= 1)
{
fclose (fp2);
}
if ((fp2 = fopen ("out.txt", "a")) == NULL)
{
printf ("out.txt:open error\n");
exit (-1);
}
//上と同じく
if (i >= 1)
{
fclose (fp);
}
if ((fp = fopen ("file.txt", "r")) == NULL)
{
printf ("file.txt:open error\n");
exit (-1);
}
//既にout.txtに移した部分が重複しないようにfgetsで調整
if (i >= 1)
{
for (j = 0; j <= i; j++)
{
fgets (str, 1024, fp);
}
}
//file.txtからout.txtに内容を移す
while (1)
{
i++;
if ((fgets (str, 1024, fp)) == NULL)
break;
if ((len = strlen (str)) >= 2)
{
str[len - 1] = '\0';
}
else
{
break;
}
if (len <= 50)
break;
fprintf (fp2, "%s\n", str);
}
}
return 0;
}
プログラムの内容は、
更新され続けるテキストファイル(file.txt)から、別のテキストファイル(out.txt)に出力するというプログラムです。(元となるfile.txtの内容を若干変えつつ、out.txtに出力することが本来の目的ですが、その部分は省略させて頂きました。)
fopenで開くと、「その時点まで」のfile.txtしか開かれません。従って更新され続けているfile.txtの内容をコンスタントに読み取る為に、while文でfopenし続ける方法を取りました。しかし、out.txtを確認すると何故か一定の行からそれ以降が追記されないままでした。恐らく一度目のfopenにより開いたfile.txtの内容のみを抽出して、2度目以降のfopenによる読み取りが意味を為していないのではないかと推測しますが・・、どうなんでしょう。あまり自信はないです。
これを解決して半永久的に出力を続けるにはどうすればよいでしょうか。
上のプログラムや私の意図する所で何か気づかれた点や、おかしいと思われた点等ありましたら是非ご教授頂きたく思います。
どんな些細なことでも構いませんので、教えて頂けないでしょうか。
環境はCentosです。どうぞよろしくお願いします。
お礼
ご親切にもありがとうございます。 なにやら難しそうですが色々手段はあるようですね。 そもそも私がブログを嫌う理由についてお話するのを忘れていました。 ブログ然り、掲示板においても余計な情報が多い、ただそれだけが理由でした。 例としてhttp://aki.soudesune.net/simpleVC_20091008144514.html こういうのがいいですね。 これはとある動画から引っ張ってきたんですが、私もこういうtxtの公開をしたいです。