何となぜ? - ファイル記述子[閉じる]

何となぜ? - ファイル記述子[閉じる]

ファイル記述子とは何ですか? なぜ必要ですか?

答え1

ファイル記述子は、プロセス内で開かれたファイルを表す数値です。これは、プログラムがどのファイルで作業しているかを覚える方法です。ファイルを開くと、使用可能な番号が見つかり、プロセスのファイル記述子テーブルのファイルに割り当てられます。ファイルを閉じると、プロセス記述子テーブルからそのエントリが削除されます。ファイル記述子間には関係はありません。Nあるプロセスのファイル記述子と別のプロセスの同じ番号を持つファイル記述子。

「すべてのファイルには3つ(stdin、stdout、stderr)があります」とは言わないでください。プロセスファイルではなくファイル記述子があります。プロセスには通常、3つ以上のファイル記述子があり、より少ない数のファイル記述子があります。 Stdin、stdout、stderr は一般的な意味を持つため、ファイル記述子 0、1、2 の名前です。 stdin(標準入力)はプログラムがユーザー入力(必要な場合)を読み取る場所であり、stdout(標準出力)はプログラムが生成されたデータが書き込まれる場所(必要な場合)とstderr(標準エラー)がエラーメッセージに使用されるになります。 Stdinとstdoutは、コマンドライン、特にパイプで使用するように設計されたプログラムで使用できます。STDOUTとSTDINを接続することはどういう意味ですか?そして(より進化した)コマンドにどのように複数の出力がありますか?

答え2

int で表されます。

はい、0から始まり番号が付けられます。これは、同様の種類の一意の項目を計算する一般的で簡単な方法です。スウェットシャツのような感じです。たとえば、1つのチームに複数のゴールキーパーがいるかもしれませんが、チームの各メンバーは一意の番号を持っているので、特定の瞬間にどのゴールキーパーが試合しているかを知ることができます。これが唯一の意味です。

ファイル記述子とは何ですか?

入力/出力導管を示します。通常、それらは両方のうちの1つですが、両方である可能性があります。

各ファイルには3つ

一般的にプロセス少なくとも3つがあり、これは* nixスタイルのオペレーティングシステムの特徴です。

なぜ必要ですか?

現在のプロセス以外のものへの入出力を望まない限り、必要はありません。しかし、その過程で「私が書いた」という意味の「あなた」は抽象的です。あなたを含むその誰も意味を持って使えないからだ。プロセスは単独では存在せず、オペレーティングシステムによって管理されるエンティティであり、他のエンティティ、アクセスファイル、ハードウェアデバイスなどと対話する必要があります。ファイル記述子はこれを行うための基本的な手段です。

なぜあなたはstdinやstdoutに書きたいと言うことはできませんか?

明らかに状況に応じて行うことができます。 Cでは、これは対応する下位記述子を返す(表面的には)マクロです(stdio.h...参照)。 WRTシェルが面倒な場合は、いつでも次のようにできます。

export stdin=0
export stdout=1

これは最も可能性が高いですが、これは良い考えではありません。、潜在的に不幸な方法でグローバルネームスペースで攻撃を受ける危険があるからです。そしてstdin入力時間も0;)より長いです。

関連情報