[解決済み] 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
).
関連
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。