高階程式設計 檔案io

2022-07-02 20:57:08 字數 1796 閱讀 9689

檔案描述符:所有開啟的檔案通過檔案描述符引用,檔案描述符是乙個非負整數。當開啟或建立乙個新檔案時,核心向程序返回檔案描述符。

1.open函式

int open(const char * 檔名,int oflag, (建立時使用第三個引數))

返回值:成功返回檔案描述符,出錯返回-1.

開啟方式:

oflag:

1.o_rdonly 唯讀

2.o_wronly 只寫

3.o_rdwr 讀寫

2.lseek:每個開啟開啟的檔案偏移量都與其關聯的「當前檔案偏移量」。通常是乙個非負整數。

off_t lseek(int fileds, off_t offset, int whence )//檔案識別符號,偏移量, 以哪一種方式

返回值:成功返回新的檔案偏移量,若出錯返回-1.

int whence:

seek_set 距離檔案偏移量多少

seek_cur 從當前位置加多少偏移量,可正可負。

seek_end 從檔案長度增加偏移量 , 可正可負。

3.read函式:

ssize_t (int filedes, void *buf, size_t nbytes) //識別符號,緩衝區(可以是堆或棧),讀多大位元組

返回值:若成功返回讀到的位元組,讀到末尾返回0,失敗返回-1.

4.write函式:

ssize_t (int filedes,void *buf,size_t nbytes)//識別符號, 緩衝區, 寫多少位元組。

返回值:成功返回已寫的位元組數,失敗返回-1.

5.close函式:

close(fd);

i/o效率:

1024 - 4096 比較好,4096為最佳。

檔案共享:

程序表項:1024個位元組,類似於結構體,裡面有標記flag,還有指向檔案表的指標。(給使用者返回的是檔案描述符)

檔案表項:每開啟乙個檔案就有1個檔案表項和對應的v結點表項。(同乙個檔案開啟多次有多個檔案表),以開啟次數為單位。

結構體成員:

1.檔案開啟方式(way)

2.偏移量(position)(從那裡讀,從那裡寫)

3.指標指向v結點表項

v節點表項:檔案的資訊。(長度,許可權。。。)

原子操作:

乙個函式就能搞定的。

dup和dup2函式:

int dup(int oldfiledes)//識別符號,當前可用最小檔案描述符最為oldfd的賦值

返回值:返回當前可用檔案描述符中的最小數值,出錯返回-1.

int dup2(int oldfd, int newfd); //如果newfd被占用了,先關掉,讓newfd作為oldfd的賦值。dup2能夠指定fd給oldfd賦值

返回值:成功返回檔案新的描述符,出錯返回-1.

fcntl函式:

int fcntl(int fd, int cmd, /* int arg */)檔案描述符, 功能描述符, 第三個引數是乙個整數,指向結構體的指標。

fcntl函式的5種功能:

1.複製乙個現有的描述符。(cmd = f_dupfd)(很少用)

2.獲得/設定檔案描述標記。(cmd = f_getfd / f_setfd)

3.獲得/設定檔案狀態標誌。(cmd = f_getfl / f_setfl)

4.獲得/設定非同步i/o所有權 (cmd = f_getown/f_setown)

5.獲得/設定記錄鎖 (cmd = f_getlk/cmd = f_setlk/ cmd = f_setlkw)

Unix高階程式設計 檔案I O

第3章檔案i o 3.1檔案描述符 fd stdin fileno 標準輸入 stdout fileno 標準輸出 stderr fileno 標準錯誤 乙個程序最多開啟63個檔案 3.2 open函式 include int open const char pathname,int oflag,m...

unix環境高階程式設計 檔案i o

一 檔案描述符 對於核心,通過檔案描述符來管理檔案。什麼是檔案描述符?在unix中,用open或者create建立幾個檔案時候,核心向程序返回乙個整數,用來記錄此檔案。以後對檔案進行操作的時候,就用此檔案描述符做引用。二 open函式 open函式用於建立乙個檔案,函式返回檔案描述符。cpp vie...

高階程式設計之檔案I O 二

函 數 接 口 1.time time t time time t t 功能 獲得1970年到現在所過的秒數 引數 t 要存放秒數空間的指標 返回值 成功返回所過的秒數 失敗返回 time t 1 2.localtime struct tm localtime const time t timep ...