2011-10-09 53 views
0

在教科書中閱讀主要有兩種文件訪問方法;順序和直接。我們在Linux中使用哪一個?Linux中的文件訪問方法

在讀取命令中,我們給出了要讀取多少字節以及哪個緩衝區。所以我們在Linux中進行順序訪問?

但物理上我們有文件存儲塊?我無法與它聯繫。

在Linux中是否可以直接訪問?

我讀過有關Galvin操作系統概念中的這些訪問模型

回答

3

兩者都是可能的。

當您在普通文件上執行read時,它會按順序讀取文件,每次將文件指針前移至正確的數量。您可以使用seek移動到文件中的任意點。

並非所有文件都支持隨機/直接訪問。例如管道通常只有順序訪問(你不能後退或跳過)。

幾乎所有的事情都是可能的,但是一些文件類型有限制。

(直接I/O(O_DIRECT標誌)文件訪問是不同的概念完全。)

0

你當然可以在一個開放的(光盤)文件中的任意位置的讀/寫。

有很多做隨機IO的方法,它們針對不同類型的使用進行了優化。

  • 最簡單的方法是seek(),後跟read()或write()。文件指針繼續讀取/寫入的字節數量,並且它可以允許隨機跳轉後的順序IO。考慮seek()作爲邏輯旋轉舊的「捲到卷」磁帶驅動器(即使我們沒有這些)。
  • pread和pwrite系統調用結合了seek()和read/write(),專門用於多線程程序(其中兩個系統調用會導致競爭條件)。它們不會更改文件指針,因此您可以在邏輯上將其考慮在內,或者隨便輸入一點數據。
  • mmap()將文件映射到內存中 - 然後在那裏使用常規指針/內存操作(例如,memset,memcpy等)執行操作。