第三章主要描述了unix系統在操做文件的操做緩存
P56頁疑問架構
1.雖然兩個文件長度相同,可是無空洞的文件佔用了20個磁盤快,有空洞佔用八個函數
無空洞的佔用磁盤快還多?spa
緣由是由於沒空洞的是把原來用空洞的文件的空洞都寫上了數值unix
P49疑問blog
關於爲何系統調用read和write稱爲不帶緩衝的I/O繼承
雖然在write和read的函數中有提供緩衝區,可是這個是進行了一次系統調用,進入內核態,因此,其緩衝是在內核態完成的,而當在用流的時候,其緩衝區是在用戶態執行的,因此稱其爲帶緩衝進程
在P61頁中,有一句話:lseek函數只修改文件表項的當前文件偏移量,而不進行IO操做get
此處的IO操做指的是將信息寫入V節點表項,由於V節點是要寫入磁盤的,而文件表項是隨時分配的,因此不會進行IO操做,此處IO指的是寫入文件,磁盤cmd
父子進程中,子進程的所繼承的文件描述符所指向的文件表項將和父進程的文件描述符所指向的文件表項相同
本章的主題架構圍繞打開文件的內核結構來描述
1.首先進行open函數或者creat函數
int open(const char* path,int oflag,...../8mode_t mode*/)
其中oflag是設置的文件狀態標誌,改變的是文件表中的文件狀態標誌
2.write,read函數
read函數,在當提供的緩存是4096的時候效率達到最高
3進行close,lseek(注意上述的lseek注意點)
4函數int fcntl(int fd,int cmd,..../*int arg*/)