2010-11-22 11 views
3

"main"スレッドの中のいくつかの変数を監視して表示することを目的としたスレッドを作成するとします。しかし、 "main"も出力を生成しているので、これら2つのスレッドの出力を別々に出力したいと考えています。私のcプログラムで使用している「メイン」スレッド以外の新しいコンソールに、新しいスレッドの出力をどのようにリダイレクトできますか?を新しい端末に出力する

+0

これはどのオペレーティングシステムで実行されていますか? –

+0

Fedoraオペレーティングシステム – sinoTrinity

+2

Nitpick:fedoraはオペレーティングシステムではありません。それは流通だ。 – Falmarri

答えて

0

このような場合(外部)に何が起こると思いますか?

プログラムを実行すると、コンソールに接続されます。もちろん、コンソールに出力を書き込む必要はありませんが(ファイルを使用できます)、コンソールを明示的に複製することはできません。

別のファイル記述子を使用していないのですか?

+0

基本的に私は2つのスレッドを持っています.1つはサーバーともう1つのクライアントとして機能します。また、両方のコンソールのステータスをリアルタイムで監視したいと考えています。両方の出力を同じコンソールに出力すると、それらはインターリーブされ、あまり読みにくくなりません。だから私は、私のCプログラムでは、サーバー用とクライアント用の2つの異なるコンソールに出力する方法があるのだろうかと思います。 – sinoTrinity

+0

@sino私はもっと明確にすべきだったと思う。いいえ、できません。また、システム上で何が起こるでしょうか?コンソールがSSH経由で開かれている場合、または旧式の物理モニターである場合はどうなりますか?繰り返しますが、別のファイル記述子に書き込むのはなぜですか? –

+0

両方の出力をREAL-TIMEで表示したいからです。私がファイルに書き込むと、時々更新するために "tail -f"のようなものを入力しなければならないかもしれません。 – sinoTrinity

2

ファイルに監視情報を出力し、tail -f filenameを使用して他の端末に表示します。

これは、grepまたはwhat-have-youを出力することができるという利点があります。

+0

私は時々「tail -f」のようなものを入力しなければならないかもしれません。コンソール経由でファイルの内容を動的に監視する方法はありますか?つまり、何かがファイルに追加された場合、コンソールは自動的にスクロールし、新しく追加されたものを "printf()"のように表示します。 – sinoTrinity

+3

@sinoあなたは 'tail -f'が何をしているかを説明しました。 –

2

ログファイルにデータを書き込んだ後、別のウィンドウからtail -f log_file.txtを使用してデータのコピーを保持するようにしていますが、別の端末を使用する必要がある場合は通常のファイルのように新しい端末(tty)を開くことができます。これの主な問題は、あなたが本当にそれがあなたのために新しい端末ウィンドウを開くことを本当に望んでいるということです。

このようなことを行うために新しい端末ウィンドウを開くのは難しく、端末エミュレータによって異なります。 Hereは、makeファイルから新しい端末を開くことについてのもう一つの質問です。プログラムから同じことをやって、プログラムを実行しているスクリプトから同じことを試して、新しい端末にcatまたはtailを実行してログウィンドウにすることができます。

#!/bin/sh 
truncate --size=0 ./logfile.txt 
xterm "tail -f ./logfile.txt" 2>&1 > /dev/null & 
your_program --log-file=./logfile.txt 

私は現在、これを達成するためのよりよい方法を知らない。

もう1つの見たいものはsyslogです。

関連する問題