C言語関係掲示板

過去ログ

No.1139 複数行同時にファイルに書き込むには?

[戻る] [ホームページ]
No.14516

複数行同時にファイルに書き込むには?
投稿者---うの(2004/06/07 23:19:24)


こんばんは。
必要なデータをデータベースより読み込み1行ずつファイルに出力していたのですが、
メモリに複数データをためてまとめて、ファイルに出力したいのですが、どのようにしたらよいのでしょうか?
よろしくお願いします。


No.14517

Re:複数行同時にファイルに書き込むには?
投稿者---nop(2004/06/07 23:35:49)


>必要なデータをデータベースより読み込み1行ずつファイルに出力していたのですが、
>メモリに複数データをためてまとめて、ファイルに出力したいのですが、どのようにしたらよいのでしょうか?

「一行」と言うのは、「改行文字までの文字列」を意味します。
よって、各行の後ろに「改行文字」を付けて出力すればよいでしょう。



No.14518

Re:複数行同時にファイルに書き込むには?
投稿者---うの(2004/06/08 00:04:48)


配列の変数ではなく、ひとつの変数に改行文字を入れて格納するのでしょうか?現在fprintfを使用しているのですが、fwriteを使用するべきなのでしょうか?
配列とした場合の、fwriteの使い方がよくわかりません。




No.14519

Re:複数行同時にファイルに書き込むには?
投稿者---かずま(2004/06/08 03:01:58)


> 必要なデータをデータベースより読み込み1行ずつファイルに出力していたのですが、
> メモリに複数データをためてまとめて、ファイルに出力したいのですが、
> どのようにしたらよいのでしょうか?

fprintf, fwrite, fputs, fputc などはすべてメモリ上のバッファにデータ
をためて、それがいっぱいになったら、まとめてファイルに出力するという
ことをやっています。だから、何もしなくていいはずです。

逆に、本当に 1行ずつファイルに出力したいのなら、fprintf などのあとに
fflush を使う必要があります。

int main(void)
{
    int i;
    for (i = 0; i < 3; i++) {
        fprintf(stdout, "hoge\n");
        /* fflush(stdout); */
        getchar();
    }
    return 0;
}

このプログラムを実行するとき、>file で標準出力を file に切り換えて
みてください。getchar() で入力待ちになっているときに、別の端末(コマ
ンドプロンプトや kterm など)から、type file または cat file してみて
も何も表示されないはずです。Enter を 3回押して、プログラムが終了し、
標準出力の file が close されて初めて、file の中身を表示できるはずです。

fflush() を使うと、本当に 1行ずつフィアルに出力され、type や cat で
表示できます。getchar() に Enter を入力するたびに行が増えているのが
わかるでしょう。



No.14521

Re:複数行同時にファイルに書き込むには?
投稿者---かずま(2004/06/08 09:57:38)


> 逆に、本当に 1行ずつファイルに出力したいのなら、fprintf などのあとに
> fflush を使う必要があります。

fflush を毎回呼び出す代わりに、setvbuf で「行バッファリング」モードに
しておくという手もあります。