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

2024-02-25 21:28
文章标签 基础 linux 管理文件

本文主要是介绍[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;
};

这篇关于[Linux]文件基础-如何管理文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/746773

相关文章

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

Linux下安装Anaconda3全过程

《Linux下安装Anaconda3全过程》:本文主要介绍Linux下安装Anaconda3全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录简介环境下载安装一、找到下载好的文件名为Anaconda3-2018.12-linux-x86_64的安装包二、或者通

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re