[解決済み] stdoutとSTDOUT_FILENOの違いについて
質問
との違いが気になりました。
stdout
と
STDOUT_FILENO
をLinux Cで作成しました。
検索作業の結果、以下のような結論になりました。この文章を確認し、間違いがあれば訂正していただけませんか?ありがとうございます。
-
stdout
C言語の標準的なI/Oストリームに属し、その型はFILE*で、stdio.hで定義されています。 -
STDOUT_FILENO
で定義されており、int 型を持ちます。unistd.h
. これはLINUXシステムのファイルディスクリプタです。でunistd.h
で、以下のように説明されています。
The following symbolic constants shall be defined for file streams:
STDERR_FILENO
File number of stderr; 2.
STDIN_FILENO
File number of stdin; 0.
STDOUT_FILENO
File number of stdout; 1.
ということで、私見ですが
STDOUT_FILENO
は、システムレベルの呼び出しに属し、ある程度はシステムAPIのようなものです。
STDOUT_FILENO
は、システム内の任意のデバイスを記述するために使用することができます。
その
stdout
はより高いレベル(ユーザーレベル?)に位置し、実際には
STDOUT_FILENO
.
stdout
はI/Oバッファを持つ。
以上が、両者の違いについての私の理解です。何かコメントや訂正があれば、よろしくお願いします。
解決方法は?
stdout
は
FILE*
定数"標準の出力ストリームを与えます。ですから、明らかに
fprintf(stdout, "x=%d\n", x);
と同じ動作をします。
printf("x=%d\n", x);
を使用します。
stdout
に対して
<stdio.h>
のような関数があります。
fprintf
,
fputs
などです。
STDOUT_FILENO
は整数のファイル記述子(実際には整数1)です。これを
write
syscallを使用します。
という関係になっています。
STDOUT_FILENO == fileno(stdout)
(のような変なことをした後を除く)。
fclose(stdout);
または、いくつかの
freopen
の後、いくつかの
fclose(stdin)
これは、ほとんどやってはいけないことです。参照
これ
でコメントされているように
J.F.Sebastian
)
通常は
FILE*
なぜなら、これらはバッファリングされるからです(したがって、通常はうまく機能します)。時には
fflush
を使用してバッファをフラッシュします。
ファイルディスクリプタの番号を使って
システムコール
のように
書き込み(2)
(で使用される)。
stdio
ライブラリ)、または
ポール(2)
. しかし、システムコールを使うのは不格好です。非常に良い効率を得られるかもしれませんが(しかしそれはコード化するのが難しい)、非常に頻繁に
stdio
ライブラリで十分です(移植性も高い)。
(もちろん
#include <stdio.h>
はstdio関数に、そして
#include <unistd.h>
-のようなシステムコール用のヘッダです。
write
. そして、stdio 関数はシステムコールで実装されます。
fprintf
を呼び出すことができます。
write
).
関連
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法
-
[解決済み] 標準出力ではなく標準エラー出力にパイプを通すにはどうしたらいいですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。