文件描述符是一个数组下标,也就是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
内核利用文件描述符来访问文件。
打开现存文件或新建文件时,内存会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
文件描述符标记的具体空间中存放FILE*,即文件指针。
错题记录:
1.以下叙述正确的是 [多选] ACD
A.程序中打开文件所返回的文件描述符, 本质上在PCB中是文件描述符表的下标
B.多个文件描述符可以通过dup2函数进行重定向后操作同一个文件
C.在进程中多次打开同一个文件返回的文件描述符是一致的
D.文件流指针就是struct _IO_FILE结构体, 该结构体当中的int _fileno 保存的文件描述符, 是一对一的关系
解析
A文件描述符实际上是内核中文件描述信息表中数组下标,用户根据下标在进程pcb中的文件描述信息表中找到相应文件描述信息,实现对文件的操作;
B不同下标的节点可以存放相同的文件描述信息结构指针
C 最小未使用分配规则
D 一个文件流指针一定对应一个文件描述符, 但是一个文件描述符可以为多个文件流指针保存。前者是1对1的关系, 后者是1对多的关系
2.以下描述正确的是
A.文件描述符和文件流指针没有任何关系
B.文件流指针结构中封装了文件描述符
C.通过open打开文件返回的FILE *fp可以直接使用read读取数据
D.通过open打开文件返回的FILE *fp可以直接使用fread读取数据
文件流指针是标准库IO操作句柄,是一个FILE*结构体指针,其中内部封装有文件描述符,其对应的操作接口有:fopen, fread, fwrite, fseek, fclose...
文件描述符是系统调用接口操作句柄,是一个非负整数,期对应的操作接口有: open, read, write, lseek, close...
根据以上理解:
- A选项错误,文件流指针中封装有文件描述符,他们是封装包含的关系
- B选项正确
- C和D选项错误,open是系统调用接口,返回的是文件描述符,并非文件流指针