当前位置: 首页 > news >正文

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入

fopen fwrite fread fclose fseek

这一系列函数都是C语言中对文件进行的操作:

int main()
{FILE* fp=fopen("text","w");char str[20]="write into text";fputs(str,fp);fclose(fp);return 0;
}

而上述C语言指令本质上都是封装了操作系统的指令实现了具体操作,例如:fopen封装了open,fclose封装了close,所以不用C语言提供的fopen…函数,也可以实现文件操作

int main()
{int fd=open("text",O_WRONLY|O_CREAT|O_TRUNC,0666);char str[100]="write into text";write(fd,str,sizeof(str));close(fd);return 0;
}

Linux中的文件是怎么被管理的

了解OS中对文件的基本操作后,已经能够自行管理文件,如何决定想要管理的文件是那个呢?现在开始探究文件是如何被管理的

1、想要对文件进行操作,需要先打开文件

电脑的内存容量是偏小的,所以文件都会被保存在磁盘上面。只有当进行操作的时候,才会加载到内存中

2、谁来打开这些文件

这些文件都是由进程负责打开和关闭,而对其进行管理则需要用到文件描述符fd

3、fd(文件描述符)是什么

文件描述符概括来说就是一个描述符对应一个文件,每当一个文件被打开,都会被赋予一个文件描述符

下图便是Linux中对于文件管理所用的结构体

在这里插入图片描述

task_struct中,存在files_struct结构体,用来保存文件通用的一些最基本属性。
在该结构体中又存在一个file结构体数组,用来保存具体文件,而前文所说的fd代表的就是这个数组fd_array[ ] 的下标(即每一个下标对应一个文件)。

其中,在fd_array[ ]中,前3个下标位置默认由stdin stdout stderr 占用

/*下面是Linux中这几个结构体的内容*/
struct task_struct {...struct files_struct *files;...
}
struct files_struct {atomic_t count;struct fdtable *fdt;struct fdtable fdtab;spinlock_t file_lock ____cacheline_aligned_in_smp;int next_fd;struct embedded_fd_set close_on_exec_init;struct embedded_fd_set open_fds_init;struct file * fd_array[NR_OPEN_DEFAULT];
};
struct file {struct file *next;struct file *parent;char *name;int lineno;int flags;
};

相关文章:

  • 掌控互联网脉络:深入解析边界网关协议(BGP)的力量与挑战
  • vue3+js 实现记住密码功能
  • CSS @符规则(@font-face、@keyframes、@media、@scope等)
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-26-处理单选和多选按钮-下篇
  • 数据库应用:Windows 部署 MySQL 8.0.36
  • 字符串(算法竞赛)--Manacher(马拉车)算法
  • Unity3D MVC开发模式与开发流程详解
  • QT/自定义槽和信号
  • Sentinel微服务流量治理组件实战上
  • SQL语法法则
  • Cover和contain属性
  • 算法沉淀——动态规划之简单多状态 dp 问题(上)(leetcode真题剖析)
  • 【0基础也能学会】JMeter:如何开始简单的WEB压力测试?
  • Vision Mamba:使用双向状态空间模型进行高效视觉表示学习
  • 微服务Day6
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Consul Config 使用Git做版本控制的实现
  • Django 博客开发教程 8 - 博客文章详情页
  • extjs4学习之配置
  • Git的一些常用操作
  • JavaScript-Array类型
  • JavaScript创建对象的四种方式
  • java第三方包学习之lombok
  • Js基础知识(四) - js运行原理与机制
  • js算法-归并排序(merge_sort)
  • LeetCode18.四数之和 JavaScript
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Lsb图片隐写
  • MySQL-事务管理(基础)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Redux 中间件分析
  • vue学习系列(二)vue-cli
  • 阿里研究院入选中国企业智库系统影响力榜
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从0到1:PostCSS 插件开发最佳实践
  • 七牛云假注销小指南
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 移动端唤起键盘时取消position:fixed定位
  • 因为阿里,他们成了“杭漂”
  • ionic异常记录
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (NSDate) 时间 (time )比较
  • (强烈推荐)移动端音视频从零到上手(下)
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)Google的Objective-C编码规范
  • (转)visual stdio 书签功能介绍
  • (转)菜鸟学数据库(三)——存储过程
  • (转)原始图像数据和PDF中的图像数据
  • *上位机的定义
  • .dwp和.webpart的区别
  • .net Application的目录