1. 程式人生 > >走進linux-目錄與檔案

走進linux-目錄與檔案

1.檔案操作許可權

所謂許可權,指的是檔案系統為了進行安全管理需要在對檔案操作時進行使用者身份認證。合法的使用者可以進行操作,而沒有許可權的使用者不能進行檔案操作。

chomd +x a.out

可以更改檔案許可權

在c程式設計中,需要3個八進位制數字來表示檔案許可權。

第一個數表示本使用者的許可權

第二個數表示同組使用者的許可權

第三個數表示其他使用者的許可權

數字不同的值代表不同的許可權,數字的含義:

4表示可讀許可權,相當於r許可權

2表示可寫許可權,相當於w許可權

1表示可執行檔案,相當於x許可權

2.錯誤處理與錯誤號

在進行檔案操作時,使用者可能會遇到許可權不足、找不到檔案等錯誤,這時需要在程式中設定錯誤捕捉語句並顯示錯誤。錯誤捕捉和錯誤輸出是應用錯誤號和strerror()函式來實現的。

2.1錯誤定義的理解

Linux系統已經把所有的錯誤定義成不同的錯誤號和錯誤常數,程式如果發生了異常,會返回這個錯誤常數。這個數字可以顯示為整形數字,也可以用strerror()函式來顯示為已經定義的錯誤資訊。(linux一共定義了131個錯誤常數)

2.2用錯誤常數顯示錯誤資訊

程式錯誤返回的錯誤常數是不容易理解的,需要轉換成有效的識別語句。函式strerror()可以把一個錯誤常數轉換成一個錯誤提示語句。

2.3用錯誤號顯示錯誤資訊

函式strerror()可以把一個錯誤常數返回成一個表示錯誤資訊的字串。

eg:   char *strerrror(int errrnum);

函式的引數是一個表示錯誤資訊的整形數,返回值是一個字串。

3.建立與刪除目錄

3.1建立目錄函式mkdir()

函式mkdir()可以在硬碟中建立一個目錄, 相當於mkdir命令。但是與mkdir命令不同的是,這裡的操作是使用C語言的函式完成目錄建立的。

int mkdir(char * pathname , mode_t mode);

在引數列表中,pathname是一個字元型指標,表示需要建立的目錄路徑,mode是表示許可權的八進位制數字,如果建立成果,則返回整數0,否則返回整數-1.

EPERM:目錄中有不符合規則的名字。

EEXIST:引數pathname所指的目錄已存在。

EFAULT:pathname指向了非法的地址。

EACCESS:許可權不足,不允許建立目錄。

ENAMETOOLONG :引數pathname太長。

ENOENT:所指的上級目錄不存在。

ENOTDIR:引數pathname不是目錄。

ENOMEM:核心記憶體不足。

EROFS:欲建立的目錄在只讀檔案系統內。

ELOOP:引數pathname有多個符號連結。

ENOSPC:磁碟空間不足。

3.2刪除目錄函式rmdir()

rmdir()函式的作用是刪除一個目錄。

int rndir(char *pathname);

引數pathname是需要刪除的目錄字串的指標。如果刪除成功,則返回0,否則返回-1。

4.檔案的建立與刪除

4.1建立檔案函式creat()

函式create()的作用是在目錄中建立一個空檔案。

int creat(char *pathname ,mode_t mode);

函式的引數pathname表示需要建立檔案的檔名和目錄名,mode表示這個檔案的許可權。

4.2刪除檔案函式remove()

函式remove()的作用刪除一個檔案。

int remove(char *pathname);

引數pathname是一個字元型指標,需要刪除檔案,檔案刪除成功則返回0,否則返回-1.

4.3建立臨時檔案函式mkstemp()

所謂臨時檔案,指的是程式執行時為了儲存中間資料而建立的檔案。計算機重啟時,這些檔案會自動刪除。如果在程式執行時需要把檔案短時間寫在磁碟上,可以使用mkstemp()函式建立一個臨時檔案。

mkstemp(char *template);

引數template表示需要建立臨時檔案的檔名字串。檔名字串中最後六個字元必須是XXXXXX。mkstemp()函式會以可讀寫模式和0600許可權來開啟該檔案,如果檔案不存在,則會建立這個檔案,返回值是開啟這個檔案的編號;如果檔案建立不成功,則返回-1.

5.檔案的開啟與關閉

檔案的開啟指的是從磁碟中找到一個檔案,返回一個整型的開啟檔案順序編號,開啟的檔案處於可讀寫狀態。檔案的關閉指的是釋放開啟的檔案,使這個檔案處於不可讀寫的狀態。

5.1開啟檔案函式open()

函式open()的作用是開啟一個檔案,使這個檔案處於可讀寫狀態。

int open(char *pathname,int flags);

int open (char *pathname, int flags,mode_t mode);

5.2關閉檔案函式close()

函式close()的作用是關閉有一個已經開啟的檔案。使用完檔案後,需要使用close()函式關閉該檔案,這個操作會讓資料寫回磁碟,並釋放該檔案所佔用的資源。

int close(int fd);