文件I/O
在对文件进行读写操作时
需要先打开文件
内核为每一个进程维护一个打开文件的列表
该表被称为 文件表 file table
该表由一些叫 文件描述符(fds) 的非负整数进行索引
列表中的每项均包含一个打开文件的信息,其中包含一个指向文件备份inode内存拷贝的指针和元数据
用户空间和内核空间把每个文件描述符作为每个进程的唯一cookies
打开一个文件返回一个文件描述符。
而接下来的操作就是把文件描述符作为基本的参数
子进程默认会获得一份父进程的文件表拷贝
文件描述符由C语言的int 类型表示
每个进程按照惯例会 至少打开三个文件描述符 0,1,2
除非进程显示地关闭它们
文件描述符 0 是 标准输入
文件描述符 1 是 标准输出
文件描述符 2 是标准错误
文件描述符不仅仅 用于 访问 普通文件
也用于访问设备文件,管道,目录以及快速用户空间锁,fifos 和 套接字
遵循一切皆文件的理念
任何你能读写的东西都可以用文件描述符来访问
open() 系统调用
通过 open()系统调用来打开一个文件并获得一个文件描述符
以只写模式打开的文件不能被读取
反之亦然