Linux操作系統-文件(1)

Linux操作系統—文件(1)(2015-7-21)

分類:Linux操作系統

總述:

  在LINUX中,幾乎任何事物都可以用一個文件來表示。Linux中的文件類型多樣,既包含普通的磁盤文件,也包含特殊的硬件設備文件,管道(PIPE)文件,套接字(socket)文件和目錄文件等。在C語言的編程環境中,與文件有關的操作主要是I/O(輸入輸出)操作。Linux環境下的I/O操作分爲兩類:
- 基於文件描述符的底層系統調用I/O
- 基於流的C語言標準庫函數調用I/O

基於文件描述符的底層系統調用I/O

一:Linux文件I/O概述

  Linux中,文件系統被組織成一樹的形狀,樹枝是目錄,樹葉是文件。其中的目錄也是一類特殊的文件。另外,Linux中用於進程間通信的管道和用於網絡通信的socket,也都以文件接口的方式提供服務。因此,文件操作編程是其它應用編程的基礎之一。
  文件爲操作系統服務和設備提供了一個簡單而一致的接口,大多數Linux文件I/O只需要用到5個函數:open, read, write, lseek和close。除此之外,使用stat, access等其它I/O函數可以獲取或設置文件的狀態和權限等信息。對於目錄文件的操作,Linux則提供了一些簡單而特殊的編程接口。

文件和目錄
  • 文件的屬性被保存在文件的索引節點(inode)中。
  • 索引節點是文件系統中的一個特殊的數據塊,用以保存文件自身的屬性,包含了如下的信息:

    1. 文件使用的設備
    2. 索引節點號
    3. 文件訪問權限和文件類型
    4. 文件的硬連接數
    5. 所有者的用戶ID
    6. 組ID
    7. 設備文件的設備號
    8. 文件大小(單位爲字節)
    9. 包含該文件的磁盤塊的大小
    10. 該文件所佔的磁盤塊
    11. 文件的最後訪問時間
    12. 文件的最後修改時間
    13. 文件狀態的最後改變時間
  • 什麼是目錄?Linux文件系統將文件的索引節點號和文件名同時保存在目錄中。目錄是用於保存其它文件的節點號和名字的文件,是將文件的名稱和它的索引節點號結合在一起的一張表。目錄中每一對文件名稱和索引節點號稱爲一個“連接”。目錄文件中的每個數據項都是指向某個文件節點的連接。刪除一個文件時,實質上是刪除目錄中與該文件對應的數據項,同時將文件的連接數減1。

  • 通常文件中包含一定的數據,磁盤中的普通文件和目錄文件都有相應的磁盤區域存儲數據。這些數據是存儲在由索引節點指定的位置上的。而其他一些文件,如設備文件等,則不具有這樣的磁盤存儲區域。
文件和設備

  硬件設備在Linux中通常也被映射爲文件。這些設備文件被放在Linux的/dev目錄下。硬件設備可分爲字符設備和塊設備,兩者的區別在於是否需要一次讀寫一整塊,比如:
- 鍵盤:是一種字符設備,一次僅能讀取一個字節。
- 硬盤:是一種塊設備,每次至少讀寫一個扇區

  Linux環境下一類比較重要的設備是終端設備。終端是一種字符設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。tty是Teletype的縮寫。比較重要的終端設備有:
- 控制終端:代表進程的控制終端(鍵盤和顯示屏或鍵盤和窗口)
- 控制檯終端:代表控制檯。錯誤信息和診斷信息通常會被髮送到這個設備(打印終端,虛擬控制檯,控制檯窗口)
- /dev/null:代表空設備,所有寫向這個設備的輸出都將被丟棄,而讀設備會立即返回文件尾標誌。空設備通常用於輸出重定向,以忽略某些錯誤輸出。

系統調用和標準函數庫
  • 系統調用:UNIX/Linux內核直接提供的編程接口,在內核空間運行。
  • C語言標準函數庫:由一些函數構成的集合,完全運行在用戶空間,其中可能使用系統調用來完成諸如訪問硬件設備的底層功能。

注意:直接使用底層系統調用進行I/O操作的效率非常底下。原因如下:
1. 執行系統調用時,Linux必須從用戶空間切換到內核空間,然後再切換回來。
2. 硬件會限制系統調用一次所讀寫的數據塊大小,如塊設備。

爲此,應讓每次系統調用完成儘可能多的工作。這正是C語言標準函數庫所做的。C語言標準函數庫帶有緩衝機制,允許在緩衝區滿或必須的情況下才使用底層的系統調用,這樣減少了系統調用的次數,提供了效率。另外,有的庫函數完全不用系統調用,只在用戶空間完成特定的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章