1. 程式人生 > >linux程式設計之入門

linux程式設計之入門

Unix和Linux的關係?

作業系統有兩大陣營,一邊是基於微軟 Windows NT 的作業系統,一邊是由UNIX衍生下來的作業系統。

Linux, Mac OS X, Android, iOS, Chrome OS甚至路由器上的韌體,這些作業系統同出一族,都是基於最初的UNIX系統開發而來,統稱Unix-like 作業系統。

Unix檔案系統

檔案被組織再一個樹結構的命名控制元件中

除了葉節點之外,樹的所有節點都表示目錄名。與樹的根相對應的目錄被稱為根目錄。它的名字是‘/’。在同一目錄中,檔名不能相同。Unix的每個程序都有一個當前工作目錄它屬於程序執行上下文,標識出程序所用的當前目錄。為了標識一個特定檔案,程序使用路徑名,路徑名由斜槓及一列指向檔案的目錄名交替組成。如果路徑名的第一個字元為斜槓,那麼這個路徑就是絕對路徑,因為它的起點是根目錄。否則,就是相對路徑。

硬連結和軟連線

硬連結的限制:

1.不允許使用者給目錄建立硬連結。因為這樣可能把目錄樹變為環形樹。

2.同一檔案系統下才能建立軟連結

軟連結(符號連結):相當於windous系統下的快捷方式。

檔案型別:

  1. 普通檔案
  2. 目錄
  3. 符號連結
  4. 面向塊的裝置檔案
  5. 面向字元的裝置檔案
  6. 管道(pipe)和命名管道(name pipe)(也叫FIFO)
  7. 套接字(socket)

檔案描述符和索引節點:

除了裝置檔案和特殊檔案系統的檔案外,每個檔案都由字元序列組成。檔案內容不包括任何控制資訊,如檔案長度或檔案結束符(EOF)。檔案系統處理檔案需要的所有資訊包含在一個名為索引節點的資料結構中。每個檔案都有自己的索引節點,檔案系統用索引節點來標識檔案。

索引節點的內容:

  • 檔案型別
  • 與檔案相干的硬連結個數
  • 以位元組為單位的檔案長度
  • 裝置識別符號
  • 在檔案系統中的索引節點號
  • 檔案擁有者的UID
  • 檔案的使用者組ID
  • 幾個時間點,最後訪問時間,最後修改時間,索引節點狀態改變時間
  • 訪問許可權和檔案模式

訪問許可權和檔案模式

檔案的使用者:

1.檔案所有者

2.同組使用者,非檔案所有者

3.其他使用者

有三種類型的訪問許可權,讀,寫,執行。因此檔案的訪問許可權由9位二進位制標記。還有三種附加的標記,即suid(set user ID),sgid(set group ID)及sticky用來定義檔案的模式。

當檔案由一個程序所建立時,檔案擁有者的ID就是該程序的UID。使用者組ID可以是該程序建立者的ID,也可以是父目錄的ID,這取決於sgid標誌位的值。

檔案操作的系統呼叫

當用戶訪問一個普通檔案或者目錄的內容時,實際上是在訪問儲存在硬體塊裝置上的一些資料。從這個意義上說,檔案系統是硬碟分割槽物理組織的使用者檢視。因為處於使用者態的程序無法與底層硬體接觸互動,所以每個實際的檔案操作必須在核心態下進行。我們需要知道如何使用檔案操作的主要系統呼叫。

開啟檔案:

程序只能訪問“開啟的”檔案。為了開啟一個檔案,程序呼叫系統呼叫:

fd=open(path,flag,mode)

path===>表示被開啟檔案的絕對/相對路徑

flag====>指定檔案的開啟方式,讀/寫/讀寫/,它也指定是否應當建立一個不存在的檔案

mode===>指定新建立檔案的訪問許可權

這個系統呼叫建立一個“開啟檔案”的物件,返回一個檔案描述符的識別符號。一個開啟檔案物件包括:

檔案操作的資料結構:如指定檔案開啟方式的一組標誌位;表示檔案當前位置的offset欄位,從這個位置開始將進行下一個操作(即所謂的檔案指標);程序可以呼叫的核心函式指標。

檔案描述符表示程序與開啟檔案之間的互動,而開啟檔案物件包含了與這種互動相干的資料。同一開啟檔案物件也許由同一個程序中的檔案描述符標識。

幾個程序也許同時開啟同一檔案。這種情況下,檔案系統給每個檔案分配一個單獨的開啟檔案物件以及單獨的檔案描述符。

訪問開啟的檔案

對普通的Unix檔案,可以順序地訪問,也可以隨機的訪問。對裝置檔案和命名管道檔案,通常只能順序地訪問。核心把檔案指標放在開啟檔案物件中,也就是,當前位置就是下一次讀或寫操作的位置。

順序訪問是檔案預設訪問方式,即read()和write()系統呼叫總是從檔案指標所在的位置開始執行。為了修改檔案指標的值,必須在程式中使用lseek()系統呼叫。當開啟檔案時,核心讓檔案指標指向檔案的第一個位元組(偏移量為0)

newoffest=lseek(fd,offest,whence)

fd:表示開啟檔案的檔案描述符

offest:指定一個有符號的整數值,用來計算檔案指標的新位置