当前位置: 首页 > 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;
};
http://www.lryc.cn/news/306010.html

相关文章:

  • bat 查找文件所在
  • 程序员的守护神:为何电脑永不熄灭?
  • Kafka快速实战以及基本原理详解
  • 微信小程序(4)- 事件系统和模板语法
  • 【Java多线程】对线程池的理解并模拟实现线程池
  • python连接mysql数据库
  • docker用法
  • DIcom调试Planar configuration
  • C#与VisionPro联合开发——跳转页面
  • 服务端测试开发必备技能:Mock测试
  • vue3中ref创建变量取值时自动补充 .value 插件 volar
  • clickhouse的docker部署与springboot整合
  • Node.js_基础知识(计算机硬件基础)
  • git bash :download.sh: line 1: wget: command not found(已解决)
  • BlackberryQ10 是可以安装 Android 4.3 应用的,Web UserAgent 版本信息
  • JS前端高频面试
  • Flask数据库操作-Flask-SQLAlchemy
  • H5获取手机相机或相册图片两种方式-Android通过webview传递多张照片给H5
  • mysql进阶学习 | DAY 14
  • 使用GPT生成python图表
  • [深度学习]yolov9+deepsort+pyqt5实现目标追踪
  • C#_WaitAll、WhenAll、async及await
  • leetcode hot100零钱兑换Ⅱ
  • 路由器配置DMZ主机映射
  • ubuntu22.04@Jetson Orin Nano之CSI IMX219安装
  • Kettle下载地址
  • 密码学基本概念
  • 9个最受欢迎的开源自动化测试框架盘点!
  • 高速稳定、网络隔离,解析“向日葵控控”远控方案在医疗行业应用
  • 抖音视频提取软件使用功能|抖音视频下载工具