-
定义:
对于内核而言,任何对文件的操作都是对文件描述符的引用,它是一个非负整数;例如前三个整数(0,1,2)分别代表(括号里为宏表示):标准输入(STDIN_FILENO),标准输出(STDOUT_FILENO),错误输出(STDERR_FILENO),;而当我们创建一个文件时系统会给我们一个未使用的最小的整数来引用文件,该整数大小为0~OPEN_MAX在Linux中为1024,即可以同时打开 -
标准系统函数调用(基本系统调用):
open():打开文件
close():关闭文件描述符
create():创建文件描述符
read():读取文件
write():写入文件
lseek():文件定位
注:这些系统调用的对象是文件描述符,而且这些系统调用都是不带缓存的,因此只有在对反应速度有要求的情况下可以用否则还是最好用库函数来代替(带缓存的函数) -
文件描述符与文件指针之间的关系
可以看看FILE类型数据结构定义:
typedef struct
{
int level; /*填充/清空一级缓存*/
unsigned flag; /*文件状态指针*/
char fd; /*文件描述符*/
unsigned char hold;/*ungetc char if no buffer*/
int bsize; /*缓存区大小*/
unsigned char *buffer; /*Data transfer buffer*/
unsigned char *curp; /*Current active pointer*/
unsigned istemp; /*Temporary file indicator*/
short token; /*Used for validity checking*/
}FILE;
可知文件指针是对文件描述符的一个封装,使之能更好地对数据进行操作。那文件描述符与文件指针之间能不能转呢?
FILE* fdopen(int fd, char *mood):mood代表模式,指明:可读(r)、可写(w)、可读写(rw)、可执行(x)
文件描述符---------------->文件指针
int fileno(FILE *stream)
文件指针-------------------->文件描述符