文件描述符|学习笔记

简介: 快速学习文件描述符

开发者学堂课程【物联网开发- 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就是文件描述符

相关文章
|
Linux
Linux利用管道通信实现一个写端对应多个读端(一)
Linux利用管道通信实现一个写端对应多个读端(一)
131 0
|
8月前
|
存储 Linux 数据格式
xv6(13) 文件系统:文件描述符&系统调用
文件系统:文件描述符&系统调用
81 0
|
存储 消息中间件 监控
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)2
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
85 0
|
消息中间件 Unix Linux
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)1
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
481 0
|
Linux
Linux利用管道通信实现一个写端对应多个读端(二)
Linux利用管道通信实现一个写端对应多个读端(二)
149 0
|
C语言
【文件描述符|重定向|缓冲区】(二)
【文件描述符|重定向|缓冲区】(二)
84 0
|
Java Linux C语言
【文件描述符|重定向|缓冲区】(一)
【文件描述符|重定向|缓冲区】(一)
108 0
|
Unix Shell Linux
进程系统调用
进程系统调用
108 0
|
Unix Linux 索引
文件描述符(通俗易懂)
文件描述符(通俗易懂)
|
缓存 Linux API
系统编程之文件IO(七)——0,1,2三个文件描述符与库函数和系统调用的区别
系统编程之文件IO(七)——0,1,2三个文件描述符与库函数和系统调用的区别
115 0
系统编程之文件IO(七)——0,1,2三个文件描述符与库函数和系统调用的区别

热门文章

最新文章