ファイルディスクリプタ(ファイルディスクリプタ)と、ファイル内のlinux

ファイルディスクリプタ(ファイルディスクリプタ)と、ファイル内のlinux

設計思想のすべてを達成するために、Linuxはファイルで、ファイルには、データ抽象化にはならないだろう、とすべての操作も、このようなように、ハードウェア、ソケット、ディスク、プロセス、スレッド、およびなど、リソースの抽象化ファイルになります。
このデザインは、すべてのシステムが大幅に我々はファイルに書き込みを読むことができるようになります限り、ソケット、ハードウェアデバイスのために、それを考えるの保守・運用の難しさを低減し、システムの噴霧動作を実現するための行動を統一したことになりますその動作はどのようにクールな問題です。

ファイルディスクリプタ:


そして、これらのいわゆる文書の操作は、我々はそれが時間と効率性の多くを過ごすことになり、それの名前を見つけるために、再び動作しませんでした。私たちは、その都度操作を提出するように、我々は直接インデックスを操作することができます、インデックスファイルを操作することができます。私たちは、このインデックスは、ファイルディスクリプタ(ファイルディスクリプタ)と呼ばれるシステムが非負の整数であるFD、と呼ばれて呼ぶことにします。各開いたり、ファイルを作成するには、カーネルは昇順で、第二は1で、最初のファイルが0で開いて、プロセスのfdに戻ります。


我々は通常./test.sh>res2.log 2>&1とコマンドは、システムが正常に起動した後、自動的にファイルディスクリプタ0、1を開始しますファイルを記録するために、標準出力ストリーム、エラーをリダイレクトすることであると言いますもちろん、あなたも、このような1をオフにして、ファイルを開いて、その後、あなたはprintfのコードを使用して、時間によって端子に出力されませんが、内部のあなたの開いているファイルの中に入りますと、これらのファイル記述子をオフにすることができます(私たちが書くときテストはトラブルの内部コード内でログを解消するように)


Pythonでは、あなたは、ハンドルのウィンドウFDに、呼び出されると呼ばれるLinuxのFDのファイルディスクリプタの下で、FDを取得するには、以下を使用することができますので、公式ドキュメントFILENOの説明はファイルディスクリプタを返すか、接続で使用扱う理由を説明します。

from multiprocessing import Pipe
rpipe, wpipe = Pipe(duplex=False)
print rpipe.fileno() #这个就得到的是fd

ファイル:

Linuxカーネル内の通常のプロセスに関連するテーブルを維持するtask_struct構造を有している、プロセス制御ブロックと呼ばれ、このブロックは、ファイルディスクリプタテーブルのインデックスであり、ファイル記述と呼ばれる構造file_structへのポインタが存在するであろう。

そして、このfile_structは通常の状況下では、プロセスは直接ファイルのみでファイルを検索するためにファイルディスクリプタ・テーブルを記述することができ、ファイルにアクセスする方法はありません、ファイルの構造を指します。いくつかの主要なファイル構造のメンバー、すなわちfile_operationとのdentry(ディレクトリエントリ)、カウントがあります。
カウント:これは、上記パイプのような、参照カウントでも同じファイルを指すことができるフォーク、DUP及び他のファイル記述子として、例えば、今FD1およびFD2は、それらが同じファイルへのすべての点は、ファイルは、その後カウントし、持っていますこの時間がカウントされ、完全に閉じられたと考えたときに、カウントが0のみであるため、図2に示すように、ファイルを閉じるために、(FD1)近隣は、オフにすることができない
操作をファイルにこのポインタがポイント、file_operationに含ま:file_operationカーネルなどの読み取りなどの機能ポインタのファイル操作は、彼がカーネル操作関数を指し、書き込み、解放、オープンは、当然のことながら、異なるファイルfile_opertionsを持って読んでキャラクタデバイスファイル操作などのさまざまな操作は、通常のファイルを読み込むと、確かではありません同様に、彼らはディスクを読みますが、ハードウェアデバイス読んでいない
のdentry:私たちは、ファイルを操作動作させるために彼のパスを知っているようにしてくださいディレクトリエントリ、ファイルパスとのdentry構造体ポインタへのポインタを、。ディスクの読み込みの数を減らすために、各ノードがのdentry構造であるのdentryキャッシュと呼ばれるカーネルキャッシュディレクトリツリー構造、限り、各パートへのパスに沿った検索のdentry。

今、何に、この構造のdentryポイントを見て?
iノードへのdentryポイント、iノードが所有者、ファイルサイズ、ファイルタイプ及び許可ビットを含み、作成、構造の時間を変更し、更新し、ディスクiノードアップから読み出された情報を維持します。:それは2人の重要なメンバーがあり
、すなわちinode_opertionsとsuper_blockの
inode_opertionsは:構造記述ファイル操作を行うことができている何、彼はなど、RM、MKDIR、MV、などのカーネル関数ファイル操作、を指す
super_block:から保存しますパーティションのスーパーブロックは、最大読み込み、ファイルシステムの種類(などと言うのext2、ext3の、)、ブロックサイズ、異なるファイルタイプと同様に、基礎となる実装が異なっています。もちろん、彼はファイルをマウントすることであるルートディレクトリを知っておく必要があるため、のdentryにメンバーsuper_blockポイントがs_root

ファイルのdentryは、iノードは、super_blockこれらの構造は、VFSのコンセプトのコアを形成します

おすすめ

転載: www.cnblogs.com/iiiiiher/p/11697041.html