文件I/O
第三章主要描述了unix系统在操作文件的操作
P56页疑问
1.虽然两个文件长度相同,但是无空洞的文件占用了20个磁盘快,有空洞占用八个
无空洞的占用磁盘快还多?
原因是因为没空洞的是把原来用空洞的文件的空洞都写上了数值
P49疑问
关于为什么系统调用read和write称为不带缓冲的I/O
虽然在write和read的函数中有提供缓冲区,但是这个是进行了一次系统调用,进入内核态,所以,其缓冲是在内核态完成的,而当在用流的时候,其缓冲区是在用户态执行的,所以称其为带缓冲
在P61页中,有一句话:lseek函数只修改文件表项的当前文件偏移量,而不进行IO操作
此处的IO操作指的是将信息写入V节点表项,因为V节点是要写入磁盘的,而文件表项是随时分配的,所以不会进行IO操作,此处IO指的是写入文件,磁盘
父子进程中,子进程的所继承的文件描述符所指向的文件表项将和父进程的文件描述符所指向的文件表项相同
本章的主题架构围绕打开文件的内核结构来描述
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*/)