Unix高階程式設計 檔案I O

2021-07-26 22:00:02 字數 2244 閱讀 2585

第3章檔案i/o

3.1檔案描述符(fd)

stdin_fileno(標準輸入),stdout_fileno(標準輸出),stderr_fileno(標準錯誤),乙個程序最多開啟63個檔案

3.2 open函式

#include

int open(const char *pathname,int oflag,/* mode_tmode*/); //第三個引數僅在建立檔案時使用確定訪問許可權

pathname:檔名即開啟或者建立檔案的路徑

oflag:必選之一 o_rdonly唯讀開啟;o_wronly只寫開啟;o_rdwr讀、寫開啟

3.3 create函式

int create(constchar * pathname;mode_t mode);//只能以只寫方式開啟所建立的檔案

3.4 close函式

int close(intfiledes);//通過檔案描述符引用關閉開啟的檔案

3.5 lseek函式

off_t lseek(int filedes,off_t offset,intwhence);  //定位讀/寫檔案的偏移量

filedes:檔案描述符

offset:偏移量

whence:seek_set 檔案的偏移量設定為距檔案開始處offset個位元組

seek_cur檔案的偏移量設定為當前值+offset

seek_end檔案的偏移量設定為檔案長度+offset

3.6read函式

ssize_t read(int filedes,void *buf,size_tnbytes);

filedes:檔案描述符

buf:接收緩衝區

nbytes:讀位元組數

3.7 write函式

ssize_t write(int filedes,const void*buf,size_t nbytes);

filedes:檔案描述符

buf:待寫入的緩衝區

nbytes:寫位元組數 、

3.8檔案共享

與檔案共享相關的三種結構,分別為程序表項,檔案表,v節點表

程序表項:檔案描述符引用和檔案表指標

檔案表:檔案狀態標誌(唯讀,只寫。。。),當前檔案偏移量,v節點指標

v節點表:v節點資訊,i節點資訊,當前檔案長度

v節點資訊:檔案型別以及檔案操作的函式指標

i節點資訊:檔案長度,檔案所有者,檔案所在的裝置等等

3.9原子操作

pread與pwrite函式,允許原子性地定位搜尋和執行i/o

ssize_t pread(int filedes,void *buf,size_tnbytes,off_t offset);

ssize_t pwrite(int filedes,const void*buf,size_t nbytes,off_t offset);

3.10 dup和dup2函式,修改檔案描述符

int dup(int filedes);//返回當前可用檔案描述符的最小值

int dup2(int filedes,int filedes2);//應先關閉filedes2檔案,然後再返回filedes2.

3.11 sync、fsync、fdatasync函式

延遲寫:unix作業系統中設有快取區快取記憶體或者頁面快取記憶體,當資料寫入檔案時,核心先將該資料複製至快取區,等待其寫滿或者核心重用該緩衝區以便其他磁碟塊資料時,在將緩衝排入輸出佇列,等待到達隊首時,才進行實際的i/o操作.

int fsync(int filedes); //確保修改後的塊立即寫入磁碟

int fdatasync(int filedes); //類似於fsync,只影響檔案的資料部分

void sync(void);  //只將所有修改過的塊緩衝區排入寫佇列

3.12 fcntl函式

int fcntl(int filedes,int cmd,/*args*/);

有5大功能cmd:

1)f_dupfd複製檔案描述字

2)f_getfd或者f_setfd獲取/設定檔案描述符標記

3)f_getfl或者f_setfl獲取/設定檔案狀態標記

4)f_getown或者f_setown獲取/設定非同步i/o所有權

5)f_getlk,f_setlk或者f_setlkw獲取/設定記錄鎖

3.13ioctl函式

終端i/o int ioctl(int filedes,int request,。。。);//每個裝置驅動程式都可以定義其專用的ioctl命令

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

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

《UNIX環境高階程式設計》 I O

不帶緩衝i o open read write lseek close等 標準i o 帶緩衝 fopen fclose fgets fputs fgetc fputc fwrite fread 標準i o對每個i o流自動進行快取管理 標準i o函式通常呼叫malloc來分配快取 它提供了三種型別的...

UNIX程式設計 14 高階IO

1.非阻塞io 對於乙個給定的描述符有兩種方法對其指定非阻塞io 1 如果呼叫open獲得描述符,則可指定o nonblock標誌 2 對於乙個已經開啟的描述符,則可呼叫fcntl由該函式開啟o nonblock檔案狀態標誌 include apue.h include include char b...