第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...