1. 程式人生 > >嵌入式Linux C程式設計學習之路(七)—— Open/Close函式

嵌入式Linux C程式設計學習之路(七)—— Open/Close函式

1. input & output:站在應用層考慮

Input:核心-->使用者,從核心讀取資料或從檔案讀取資料 ————read函式

Output:使用者-->核心,寫資料到核心或寫資料到檔案中 ————write函式

2. 核心中檔案太多了,寫到哪個檔案,從哪個檔案中讀呢?這些功能由核心管理,又稱檔案管理。

因此read/write時需要有引數指定某個檔案,而且在read/write之前需要open,建立或開啟檔案。同時操作完後還要把檔案關閉close。

3. open函式

open(char *, flag, mode)在fcntl.h檔案中宣告。函式的作用:建立或開啟某個檔案,引數:最多有三個引數;

第一個引數,char * 包含有檔名和路徑

第二個引數:flag  開啟檔案的方式

第三個引數:mode  建立檔案的許可權。 //在建立檔案時需要有許可權的引數;如果開啟檔案,則不需要這個引數Ø  flag內容如下:

flag

功能

O_RDONLY

只讀

O_WRONLY

只寫

O_RDWR

讀寫

O_CREAT

建立一個檔案

O_EXCL

如果使用O_CREAT時檔案存在,則可返回錯誤訊息。這一  引數可測試檔案是否存在。

O_TRUNC

開啟檔案(會把已經存在的內容給刪除)。

O_APPEND

追加方式開啟檔案(不會把已經存在的內容給刪除)。

Ø  返回值:

成功:檔案描述符,它是一個非負的正整數,即檔案的ID號,相當於人的身份證號;

出錯:-1。

Open 函式建立檔案時的許可權是:

== mode &(~umask)

B111 111 111& ~(B 000 010 010)  =  B 111 101 101

4. 檔案描述符概述

核心的一個重要功能是檔案管理,系統有非常多的檔案,核心怎樣認識每一個檔案呢?核心採用ID號的方式標識這些檔案,inode號,node號表示不同的檔案,比如ls  –lai  i,只要檔案不一樣,inode號就不一樣。那麼這些核心的檔案的ID號,在每個使用者的程式中怎樣對映的呢?即是檔案描述符。

ID號有什麼規律呢?從0開始累加,程式進行時(程序),核心會自動開啟3個檔案描述符,0,1,2,分別對應,標準輸入、輸出和出錯,這樣在程式中,每開啟一個檔案,檔案描述符值從3開始累加。

5. close指令

close(fd),

呼叫close()函式可以關閉一個開啟的檔案。

呼叫成功返回0,出錯返回-1,並設定errno;

注:當一個程序終止時,該程序開啟的所有檔案都由核心自動關閉;

6. 實現touch指令

#include "stdio.h"

#include "unistd.h"

#include "fcntl.h"

int main(int argc, char * argv[]){

int fd;

fd = open(argv[1],O_CREAT | O_RDWR, 0777);

if(fd < 0){

printf("create file %s error",argv[1]);

return -1;

}

printf("create file %s success, fd=%s\n",argv[1],fd);

close(fd);

return 0;

}