阻塞与非阻塞是文件本身的属性;
每个文件描述符是数组的一个索引,这个数组每个元素保存了一个指向文件表的指针;
这个文件表的结构如下:
struct file {
unsigned short f_mode; // 文件权限位
unsigned short f_flags; // 文件状态位
unsigned short f_count; // 引用计数
struct m_inode * f_inode; // 文件存在磁盘上的哪个位置等等其它信息由这个字段来解释
off_t f_pos; // 当前偏移量
};
每次我们通过 open 函数打开一个文件时,open 函数的第二个参数 flags 都会保存到到这 f_flags 成员;
在上一节中,为了让终端文件具备 O_NONBLOCK 属性,我们不得不重新 open 一次。有没有更好的办法,可以让我们不用重新 open,直接修改这个 f_flags 的值?
有,使用 fcntl,可以让我们直接修改 f_flags 标志;