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

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



松田です.

man setbuf

で調べてください.1回1回 fflush すれば(line buffered),pipe でも順番は
守られます.setlinebuf(stdout) とすればよいでしょう.


KIMURA, Minoru wrote:
> 木村です。
> # 目的外使用です、ごめんなさい
> 
> 簡単なテストプログラムがあります。
> 
> ---
> #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の場所をいじることはでき
> ません。
> # 変更しても結果は変わらなかったのですが
> 
> /きむら
> 
> 


-- 
-------------------------------------------------------------------
     mmm     mmm     | matuda@film.s.dendai.ac.jp
  ((^_^)) <- ->    | 松田七美男@東京電機大学 環境物質化学科 教授
    {   } ({   })  | 〒101-8457  千代田区神田錦町2-2
    _I I_    _I_     | Tel:03(5280)3402  Fax:03(5280)3570

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

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