文件描述符|学习笔记

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

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

相关文章
|
机器学习/深度学习 人工智能 自然语言处理
大模型开发:解释强化学习以及它与监督学习的不同之处。
强化学习(RL)是机器学习的一种,通过智能体与环境交互学习最优策略,以获取最大回报,常用于动态环境如游戏和机器人。与之不同,监督学习(SL)使用有标签的训练数据来预测新数据,适用于如图像分类等稳定问题。两者关键区别在于学习方式和应用场景:RL侧重环境交互和策略优化,适合未知动态环境;SL依赖已知标签数据,适合标签明确的任务。在大模型开发中,两者各有优势,并不断融合创新,推动人工智能发展。
1126 2
|
安全 Java Python
instanceof 的实现原理
`instanceof` 是 Java 中的一个关键字,用于判断一个对象是否属于某个类或其子类。其原理是通过检查对象的类层次结构,确定该对象是否是指定类的实例。具体实现涉及对象头中的类元数据信息和类加载器的作用。
|
机器学习/深度学习 人工智能 算法
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
459 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
|
10月前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
292 3
|
机器学习/深度学习 存储 人工智能
【AI系统】自定义计算图 IR
本文介绍了模型转换的方法及流程,重点讲解了计算图的自定义方法和优化技术。通过IR(Intermediate Representation)将不同AI框架的模型转换为统一格式,实现跨平台高效部署。计算图由张量和算子构成,支持多种数据类型和内存排布格式,通过算子融合等优化技术提高模型性能。文章还详细说明了如何使用FlatBuffers定义计算图结构,包括张量、算子和网络模型的定义,为自定义神经网络提供了实践指南。
364 3
【AI系统】自定义计算图 IR
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
Python
HTTP协议不再是迷!Python网络请求实战,带你走进网络世界的奥秘
本文介绍了HTTP协议,它是互联网信息传递的核心。作为客户端与服务器通信的基础,HTTP请求包括请求行、头和体三部分。通过Python的`requests`库,我们可以轻松实现HTTP请求。本文将指导你安装`requests`库,并通过实战示例演示如何发送GET和POST请求。无论你是想获取网页内容还是提交表单数据,都能通过简单的代码实现。希望本文能帮助你在Python网络请求的道路上迈出坚实的一步。
244 0
|
消息中间件 缓存 监控
为什么我的topic总共有15个分区,但是每单个服务里面看都只有11个分区
为什么我的topic总共有15个分区,但是每单个服务里面看都只有11个分区
287 0
|
安全 程序员 数据库
程序员必知:xadmin快速搭建后台管理系统
程序员必知:xadmin快速搭建后台管理系统
472 0
|
资源调度 分布式计算 Spark