質問

私は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....

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top