stdin stdout stderrについての質問
-
29-09-2019 - |
質問
私はC ++でMIPSシミュレーターを設計していますが、Simplified OSはSTAT()を時々実行できる必要があります(シミュレーターで実行されているプログラムには、入力または出力などが必要です。)
問題は、stdin、stdout、およびstderrをstat "stat(" stdin "、buff)"のパラメーターとして主張できる必要があることです。実際には、ファイル記述子を使用してファイルを指してSTAT-EDであるFSTAT()を使用します。 STDIN、STDOUT、およびSTDERRの単純なOSのファイル記述子テーブルは0、1、および2を予約します。私はstdinなどについて少し混乱しています。それらはストリームです、私は彼らがstdio.hで定義されていることを認識していますが、これらの各ストリームのファイルに関するすべての関連情報を統計構造をどのように取得するのでしょうか?
解決
POSIXシステムでは、使用できます fileno()
aから変換する FILE*
(例えば stdin
, stdout
, stderr
)整数ファイル記述子へ。そのファイル記述子はに送信できます fstat()
.
他のヒント
POSIXの使用を説明するために、標準端子出力がファイルにリダイレクトされているかどうかを判断する方法の非常によく知られている例があります。 fileno
働き
if (!isatty(fileno(stdout))){
fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");
return 1;
}
プログラムで上記のコードを使用し、そのようなプログラムがこのように実行された場合
foobar_program > foobar_program.output
'foobar_program.output」には含まれます
argv, argc, someone is redirecting me elsewhere...\n
ファイルストリームポインターは、ポインタータイプの構造にすぎません FILE
, 、すなわち FILE *
, fileno
その構造を取り、それを関連するファイル記述子に変換し、それに応じてマニュアルページに fileno
ここ
The function fileno() examines the argument stream and returns its integer descriptor.
そしてまた ここ POSIXマニュアルページで、私は引用します fileno - map a stream pointer to a file descriptor
....