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