第三章主要描述了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*/)