开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:文件描述符】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/10974
文件描述符
内容介绍
一、 I/O 函数
二、 文件描述符
一、I/O 函数
系统调用I/O函数,就是操作系统提供的一些输入输出函数,C语言学过F/open,F/read,F/write,是标准C库提供的I/O函数输入输出函数,今天讲操作系统提供的接口I/O函数,操作系统提供的I/O函数都是针对文件描述符的,这个文件描述符学C语言时说过F/open打开文件时返回文件指针,文件指针代表一个文件,而文件描述符用来代表一个文件。
二、文件描述符
1.简介
文件描述符是非负整数,打开现存文件或新建文件并打开文件时,系统内核会返回一个文件描述符,文件描述符用来指定已打开的文件。
其实文件描述符是文件指针的,以前学过文件指针,文件指针指向一个结构体,结构体当中存放了文件的信息,其实文件结构体里就有一个成员是文件描述符。
如果一个文件描述符代表一个文件是一个非负整数,如果打开文件出错,这个文件描述符的指针变量的值就是一个负数。文件描述符是一个整数,打开一个文件时给他赋一个值。
每个进程当中都有一张文件描述符的表,其中有三个文件描述符012,这三个文件描述符默认是被打开的,标准输入文件描述符被打开分配的文件描述符是0,标准输出设备文件被打开给它分配的文件描述符是1,标准错误输出文件被打开他分配的文件描述符是2,这三个文件描述符一旦运行一个程序默认是被占用的,,打开一个文件比如是text.test,与之对应的标识test文件的文件描述符就再分配一个就是3,再打开一个文件分配的文件描述符是4。这是分配的原则,从小到大去分配,如果前面有文件被关闭了那个文件描述符就可以被重复利用。
2.注意:
文件描述符的作用范围是进程,在一个进程中是独一无二的。
我这个进程中有个0代表标准输入符3代表text.test,另外一个进程中可能3代表bbb.test
# define STDN FILENO 0//标准输入的文件描述符
# define STDOUTFILENO1/标准输出的文件描述符
# define STDERR FIENO2//标准错误的文件描述符
程序运行起来后这三个文件描述符是默认打开的。
3.回顾一下文件指针
FILE*指针变量标识符
得到一个指针,其实指针指向
typedef struct
short level;//缓冲区“满”或“空”的程度
unsigned flags;//文件状态标志
char fd;//文件描述符
unsigned charhold;//如无缓冲区不读取字符
short bsize;//缓冲区的大小
unsigned char *buffer;//数据缓冲区的位置
unsigned ar*curp://指针,当前的指向
unsigned istemp;//临时文件,指示器
shottoken://用于有效性检查
}FIINE;
一个这个类型的结构体,这个结构体存储了文件的信息,这个文件指针FILE*指针变量标识符就用来代表一个文件,其中指向}FIINE这个结构体,结构体当中有一个成员char fd就是文件描述符