[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:26676] stdout/stderrを交互に出すには?



木村です。
# 目的外使用です、ごめんなさい

簡単なテストプログラムがあります。

---
#include <stdio.h>
#include <errno.h>
int errno;

main()
{
    perror("Error message1\n");
    printf("Output message1\n");
    perror("Error message2\n");
    printf("Output message2\n");
    perror("Error message3\n");
    printf("Output message3\n");
    fflush(stdout);
}
---

端末上で実行するとちゃんとプログラムの順番に出力されます。
ここで、

$ ./a.out >& a.log

と実行すると、最初にstderrの出力だけが固まって出力され、stdoutの
出力があとから固まって出力されます。
これを端末上で実行したときと同じ様な出力でファイルに得るには
どうすれば良いでしょうか?

PlamoでもSolarisでも同様な出力になるのでOSには依存しないようです。
stdoutとstderrのバッファをそれぞれflushするので固まって出力される
という原理はわかるつもりですが、端末と同じ出力を得られないという
のが納得の行かないところです。
何かのパラメータをいじることでflushのタイミングを制御して順番に
出せないものでしょうか。

ちなみに問題になっているアプリケーションは完成プログラムなので、
このテストプログラムのように自由にfflushの場所をいじることはでき
ません。
# 変更しても結果は変わらなかったのですが

/きむら

Follow-Ups
[plamo:26677] Re: stdout/stderrを交互に出すには?, OGAWA Kunihiko
[plamo:26678] Re: stdout/stderrを交互に出すには?, matuda

[検索ページ] [メール一覧]
Plamo ML 公開システム