文件描述符与文件指针
来源:互联网 发布:软件检测 编辑:程序博客网 时间:2024/05/18 11:45
首先看下下面函数:
FILE* fopen(const char* path, const char* mode)
我们看它的返回值,当文件顺利打开后,指向该流的文件指针就会被返回,也就是说这个函数返回值为 FILE* 类型(文件指针类型)。
再看另一个函数:
int open(const char* pathname, int flags)int open(const char* pathname, int flags, mode_t mode)
这个函数返回一个int类型的数,其实返回的这个int类型的数,就是文件描述符。
一、我们先看看这个文件描述符。
在linux操作系统下,一切皆文件。当我们打开某个文件时,就会获得该文件的描述符。每个进程在PCB会保存着一张文件描述符表,而这个描述符就是这张表的索引,每个表项都有一个指向已打开文件的指针。通俗一点说,每个进程的PCB里都一个数组(文件描述符表),这个数组里保存着已打开文件的指针,而文件描述符就是该指针所对应的下标。
如下图:
其中系统默认0号下标下是键盘文件的指针,1号下标是显示器文件指针,2号下也是显示器文件指针。文件描述符中0代表标准输入,1代表标准输出,2代表标准错误。文件描述符是从当前最小未被使用的整数处开始分配的。像上图中,0,1,2这三个描述符已被使用,那新打开文件时,其描述符就为当前被使用的最小整数3处开始。如果现在close(0);那就从0开始分配,但会跳过1、2,因为1、2正在使用中。
在上图中我们看到有file结构体和file_struct,链接 http://blog.csdn.net/leewenjin/article/details/7605214 对此有详细讲解。
二、文件指针
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 定义说明文件指针的一般形式为:
FILE *指针变量标识符;
其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。
在使用文件时,需要在内存中为其分配空间,用来存放文件的基本信息,给结构体类型是由系统定义的,C语言规定该类型为FILE型,其声明如下:
typedef struct { char *_ptr; //文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //指基础位置(即是文件的其始位置) int _flag; //文件标志 int _file; //文件的有效性验证 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; //文件的大小 char *_tmpfname; //临时文件名}FILE;
例如:
FILE *fp;
表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。
- 区别:文件描述符与文件指针
- 浅谈文件描述符与文件指针
- 文件描述符与文件指针
- 文件描述符与文件指针
- 文件描述符与文件指针
- 文件描述符与文件指针
- 文件指针 & 文件描述符
- 文件描述符&文件指针
- C文件指针与文件描述符转换
- 文件描述符与文件指针的相互转化
- 文件描述符与文件指针的区别
- 文件描述符与文件指针的相互转化
- 文件描述符与文件指针的相互转化
- 文件描述符与文件指针的相互转化
- 文件描述符fd与文件指针FILE*的关系
- Linux下的文件描述符与文件指针
- 文件描述符与文件指针的区别
- 文件指针、文件描述符、文件句柄
- Python练习3-XML-RPC实现简单的P2P文件共享
- JMS
- autojump——一步到位
- windows下安装composer,纯手工,绝对有效
- JavaScript 面向对象之一 —— 对象(对象与JSON的区别)
- 文件描述符与文件指针
- Effective Java读书笔记十三(Java Tips.Day.13)
- use bindiff to diff patch
- Qt_log2000_事件的传递
- 32位的Ubuntu16.04安装QT5.8,并编译实现window环境下的代码
- [C++ 从入门到放弃-02]C++STL之string
- uniq命令
- IBatis——初步总结
- 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解