首页 > 编程知识 正文

文件描述符表,文件描述符fd:0

时间:2023-05-04 13:19:45 阅读:170655 作者:1463

文件描述符(fd )和文件结构

文件描述符(fd )和文件结构

内核利用文件描述符“file descriptor”访问文件。 文件描述符是非负整数。 打开现有文件或创建新文件时,内核会返回文件描述符。 要读写文件,还必须使用文件描述符指定要读写的文件。

我们知道,在Linux上,一切都是文件,文件描述符是内核访问文件的桥梁,可以想象文件描述符的重要性。

文件描述符是非负整数,所以到底是什么? 有什么规律呢?

首先,创建一个新文件,看看其文件描述符有多少。 发现是3。 再次创建一些后,您发现文件描述符是按3到1次添加的规则排列的。 这个时候,我们会考虑的。 0、1、2怎么样?

事实上,如果将程序从硬盘加载到内存中,程序将成为一个进程。 此时,系统默认打开三个文件。 标准输入(stdin )、标准输出(stdout )、标准错误(stderr )。 对应于这三个文件的三个文件描述符分别是0、1、2。

但是这就是文件描述符的规律吗? 是的,但是不完整。

假设我们刚连续创建了几个文件,有三个。 分别为文件1、文件2和文件3。 那么,删除file2并创建file4时,file4的文件描述符是多少呢?

用之前总结的规律来说,是6吧。 但是,实际上是4。 回想一下。 4是原始文件2的文件描述符,但如果删除文件2后有一个名为4的块空闲,则会放入新创建的文件。

总而言之,分配文件描述符从最小的未使用的开始

文件和进程之间的关系:

文件描述符实际上是文件描述符表的下标。

说起来,让我们回顾一下我们一直没注意的地方。

文件是什么类型的

有我们先学的类型,学的类型的指针,但有一个例外。 FILE* )不知道FILE是什么类型。 我不知道你们是否知道,但不管有没有,今天请在这里知道。

FILE实际上是一个结构,即前面绘制的图中的file_struct,其中文件描述符是此结构的成员。

我们学习C语言的时候,一般都是用FILE*访问文件,现在知道软盘了。 那么,这两者之间有什么联系和区别呢?

1、文件指针是指包括被称为文件描述符(fd )的成员的文件结构

2、文件描述符为整数,

3、软盘是内核访问文件的桥梁; 在C库中,f系列仅识别文件指针

我们已经知道文件的一个成员是文件描述符,其他成员呢?

struct _iobuf {

char *_ptr; //文件输入的下一个位置

int _cnt; //当前缓冲区的相对位置

char *_base; //基本位置(即文件的第一个位置) )。

int _flag; //文件标记

int _file; //文件描述符

int _charbuf; //检查缓冲区的状况,如果没有缓冲区就不读取

int _bufsiz; //缓冲区大小

char *_tmpfname; //临时文件名

(;

typedef struct _iobuf FILE;

files_struct定义:

struct files_struct

{

atomic_t count; /*共享此表的进程数*

rwlock_t file_lock; /*保护以下所有域不嵌套在tsk-alloc_lock中*/

int max_fds; /*当前文件对象的最大数量*

int max_fdset; /*当前文件描述符的最大数目*/

int next_fd; /*在分配的文件描述符中输入1*/

struct file ** fd; 指向/*文件描述符数组的指针*

fd_set *close_on_exec; exec ) )运行时必须关闭的文件描述符() /

fd_set *open_fds; /*指向打开的文件描述符的指针*

fd_set close_on_exec_init; exec ) )运行时需要关闭的文件描述符的初始值集合(/

fd_set open_fds_init; /*文件描述符的初始值集合*

struct file * fd_array[32]; /*文件对象指针的初始化数组*

(;

结构文件

{

struct list_head f_list; /*所有打开的文件形成一个链表*

struct dentry *f_dentry; /*指向相关目录条目的指针*

struct vfsmount *f_vfsmnt; 指向/*VFS挂载点的指针*

struct file_operations *f_op; 指向/*文件操作表的指针*

mode_t f_mode; /*文件打开模式*

loff_t f_pos; /*文件的当前位置*

unsigned short f_flags; /*打开文件时指定的标志*

unsigned short f_count; /*使用此结构的进程数*

unsigned long f_reada、f_ramax、f_raend、f_ralen、f_rawin;

/*预读标志、要预读的最大页数、上次预读的文件指针、预读的字节数和

预读页数*

int f_owner; /*信号传输异步I/O数据*

unsigned int f_uid,f_gid; /*用户的UID和GID*/

int f_error; /*网络写入错误代码*

unsigned long f_version; /*版本号*

void *private_data; /* tty驱动程序所需*

(;

文件结构的几个重要成员变量:

1、f_flags:表示打开文件的权限。

f_pos:表示当前读写文件的位置。

3、f_count:表示打开文件的引用数,如果有多个文件指针指向该文件,则增加f_count的值。

f_mode:设置文件的访问模式。 例如,只读、写专用、可写等。

关于文件描述符(fd )和文件结构的教程

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。