1.进程(文件描述符表:文件描述符标志(close_on_exec),指针)---用户空间
2.内核(文件表项:文件状态标志(读写,添加,同步,非阻塞),当前文件偏移量---每个进程对该文件都有偏移量,指针),一个文件表项对应一个进程打开的一个文件
3.V节点(i节点(文件所有者,文件长度,文件实际数据块指针)),一个V节点对应一个实际文件。
1.每次write后,如果当期文件偏移量>文件长度,文件加长
2.设置o_append后,偏移量会被设置为文件长度
3.若调用 lseek 定位到当期文件的尾端,偏移量被设置为文件长度
4. lseek 函数只修改文件表项中的当期文件偏移量,不进行任何i/o操作
5. fork,dup 父进程和子进程的每一个打开的文件描述符共享同一个文件表项
6. 文件描述符标志作用域一个进程的一个描述符,文件状态标志作用域指向该文件表项的任何一个文件描述符。
7.两个系统之间的调用,都不是原子操作
8.sync 定期冲洗(flush),不等待磁盘完成
9.fsync 对指定的 fd 生效,并等待磁盘完成,还会更新文件属性,数据库需要确保修改过的块立刻写到磁盘上。
10.fdatasync 只影响文件的数据部分
2.文件描述符
3.函数 open 和 openat
creat()
close()
- lseek()
7.read()
8.write()
9.I/O效率
10.文件共享
11.原子操作
12.函数 dup 和 dup2
13.函数 sync, fsync 和 fdataysnc
14.函数 fcntl
函数 ioctl
/dev/fd