2011-10-09 12 views
0

主に2つのファイルアクセス方法がありますが、シーケンシャルとダイレクト。 Linuxではどちらを使用していますか?Linuxのファイルアクセス方法

readコマンドでは、読み込むバイト数とバッファを指定します。私たちはLinuxで順次アクセスしていますか?

しかし、物理的にはブロックが格納されていますか?私はそれに関連することができませんでした。

Linuxで直接アクセスできますか?

ガービンによるオペレーティングシステムの概念のこれらのアクセスモデルについては、

答えて

3

のいずれも可能です。

普通のファイルでreadを実行すると、ファイルポインタを順番に読み込み、毎回適切な量だけファイルポインタを進めます。

しかし、seekを使用して、ファイル内の任意のポイントに移動することもできます。

すべてのファイルがランダム/直接アクセスをサポートするわけではありません。例えば、パイプは通常、シーケンシャルアクセスのみです(巻き戻しやスキップはできません)。

ほとんどすべてが可能ですが、一部のファイルタイプには制限があります。

(ダイレクトI/O(O_DIRECTフラグ)によるファイルアクセスが全く異なる概念である。)

0

あなたは確かにオープン(ディスク)ファイル内の任意の位置からの読み出し/書き込みすることができます。

さまざまな種類の使用に最適化されたランダムIOを実行する方法はいくつかあります。

  • 最も簡単な方法は、seek()に続いてread()またはwrite()です。ファイルポインタは、読み書きされたバイト数だけ移動し、ランダムジャンプに続いて順次IOを許可することができます。 seek()は、古い「リール・トゥ・リール」テープ・ドライブを論理的に回転させるものと考えてください(これ以上はありません)。
  • preadシステムコールとpwriteシステムコールは、マルチスレッドプログラム(2つのシステムコールが競合状態になる)で使用するために、seek()とread/write()を組み合わせています。彼らはファイルポインタを変更しないので、あなたは論理的にデータのランダムなビットを取ったり入れたりすることができます。
  • mmap()は、ファイルをメモリにマッピングします。通常のポインタ/メモリ操作(memset、memcpyなど)を使用して、それを使って何を行うことができます。
関連する問題