<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux文件管理(3)》(27)

《Linux操作系统原理分析之Linux文件管理(3)》(27)

  • 8 Linux文件管理
    • 8.6 文件管理和操作
      • 8.6.1 系统对文件的管理
      • 8.6.2 进程对文件的管理

8 Linux文件管理

8.6 文件管理和操作

8.6.1 系统对文件的管理

Linux 系统把所有打开的活动文件进行统一管理,组成“系统打开文件表”。系统打开文件表是一个双向链表,每个表项是一个 file 结构体,存放着活动文件的控制信息。其定义在/include/linux/fs.h。
Struct file
{
Mode_t f_mode; /文件的打开模式/
Loff_t f_pos; /文件的当前读写位置/
Unsigned short f_flags; /文件操作标志/
Unsigned short f_count; /共享该结构体的计数值/
Unsigned long f_reada,f_ramax,f_raend,f_ralen,f_rawin;
Struct file *f_next,*f_prev; /连接前后节点的指针/
Struct fown_struct f_owner;
Struct inode * f_inode; /文件对应的 inode/
Struct file_operation *f_op; /指向文件操作结构体的指针/
Unsigned long f_version; /文件版本/
Void *private_data; /指向与文件管理模块有关的私有数据的指针/
}

8.6.2 进程对文件的管理

  1. 数据结构
    对于进程打开的件,由进程的两个私有结构进行管理:
    👉fs_struct 记录着文件系统根目录和当前目录。
    👉files_struct 包含着进程的打开文件表。
struct fs_struct 
{
atomic_t count; /*共享此结构的计数值*/
int umask; /*文件掩码*/
struct dentry * root, * pwd; /*根目录和当前目录的 inode 指针*/
};
struct files_struct
{
int count; /*共享计数值*/
fd_set *close_on_exec;
fd_set *open_fds;
struct file * fd [NR_OPEN]; /*进程打开文件表,有 256 个元素,表示最多可以同时打开 256 个文件*/
};

说明:
👉当进程打开一个文件时,建立一个 file 结构体,并加入到系统打开文件表中,然后把 file 结构体的首地址写入 fd[]数组的一个空闲元素中.
👉linux 中把 fd[]数组的下标作为一个进程的活动文件标志 ,称为进程标识符。

  1. 当前进程要处理某个打开文件时,访问各个数据结构的步骤:
    3.

8.6.3 文件操作函数
在这里插入图片描述
lseek - 移动文件指针的位置,只用于可以随机存取的设备
read – 从字符设备读数据
Write – 向字符设备写数据
Open-打开设备,并初始化设备
Release-关闭设备,并释放资源

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.北方苍鹰算法4.实验参数设定5.算法结果6.参考…

12.07

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置//去掉表头this->setWindowFlags(Qt::FramelessWindowHint);//重新设置大小this->resize(800,420);//设置背景颜色this->setStyleSheet("background-color:whi…

mfc140.dll丢失的解决方法,以及解决方法的优缺点

如果你在使用电脑时遇到了“mfc140.dll丢失”的错误提示,这可能会阻止你运行特定的应用程序或游戏。这篇文章将向你介绍导致此错误出现的原因以及mfc140.dll丢失的解决方法,让你的电脑系统恢复正常运行。 一.mfc140.dll丢失的解决方法以及优缺点 方法 1…

Hadoop3.x完全分布式环境搭建Zookeeper和Hbase

先在主节点上进行安装和配置,随后分发到各个从节点上。 1. 安装zookeeper 1.1 解压zookeeper并添加环境变量 1)解压zookeeper到/usr/local文件夹下 tar -zxvf /usr/local2)进入/usr/local文件夹将apache-zookeeper-3.8.0-bin改名为zookeep…

【Linux】进程通信之命名管道mkfifo

1.认识命名管道 匿名管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件 2.在命…

学会使用这个魔法棒,再也不用在容器里安装乱七八糟的命令工具了!

在构建镜像的时候,我总是倾向于极简构建,一切没有必要的软件包都不安装,以此来缩小镜像的容量。但是这种做法为后续运维带来了一些困难,如在日常查询、排查问题的时候发现很多命令用不了,不得不在容器中安装额外的命令…

配置BFD状态与接口状态联动示例

BFD简介 定义 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响,提高网络的可靠性,网…

git 本地有改动,远程也有改动,且文件是自动生成的配置文件

在改动过的地方 文件是.lock文件,自动生成的。想切到远程的分支,但是远程的分支也有改动过。这时候就要解决冲突,因为这是两个分支,代码都是不一样的,要先把这改动的代码提交在本地或者提交在本分支的远程才可以切到其…

用keepalived做mysql高可用

两台机器(centos7系统)安装mysql [rootmysql-keep-master ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm [rootmysql-keep-master ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm [rootmysql-keep-master ~]# yum -y install yu…

深入探索C语言中的二叉树:数据结构之旅

引言 在计算机科学领域,数据结构是基础中的基础。在众多数据结构中,二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构,每个节点最多有两个子节点:左子节点和右子节点。这种结构使得搜索、插入、删除等操作…

web:[GXYCTF2019]BabyUpload(文件上传、一句话木马、文件过滤)

题目 页面显示为文件上传 随便上传一个文件看看 上传一个文本文件显示 上传了一个图片显示 上传包含一句话木马的图片 上传了一个包含php一句话木马的文件,显示如上 换一个写法 上传成功 尝试上传.htaccess,上传失败,用抓包修改文件后缀 …

python 编写的windows实用演示程序 使用到C语言风格,同时对Windows消息机制进行演示

因为内容较多 涉及知识点也多一些 但是具体使用时分开在几个文件 同时展示C语言的结构类型如何在python中定义与使用。为了便于区别 我定义的数据文件最后都带有一个数字1,涉及第三方库较少 ,以便灵活使用Windows自带的很多api函数功能,可以根…

智能优化算法应用:基于爬行动物算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于爬行动物算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于爬行动物算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.爬行动物算法4.实验参数设定5.算法结果6.参考…

Linux_CentOS_7.9配置oracle sqlplus、rman实现上下按键切换历史命令等便捷效率功能之简易记录

配置oracle sqlplus以及rman可以上下按键切换历史命令等便捷效率功能 设置前提是已经yum安装了rlwrap软件具体软件下载及配置参考文章http://t.csdnimg.cn/iXuVK su - oracleVim .bash_profile ## 文件中增加如下的别名设置 ---------------- alias sqlplusrlwrap sqlplus…

如何使用Matlab完成窗口与子窗口

目录 一、前言 二、主窗口与主窗口按钮 三、子窗口 四、调用函数并显示在子窗口中的文本框中 五、关闭子窗口 一、前言 有时候需要借用Matlab完成一个图窗功能,但是我们的程序不仅拥有功能,还拥有一些子功能,那么我们该如何借助Matlab完…

【无线网络技术】——无线个域网(学习笔记)

📖 前言:手机、PC机、电视等消费类产品非常普及,人们希望有一种短距离、低成本、小功耗的无线通信方式,实现不同功能单一设备的互联,提供小范围内设备的自组网机制,并通过一定的安全接口完成自组小网与广域…

12.Java程序设计-基于Springboot框架的Android学习生活交流APP设计与实现

摘要 移动应用在日常生活中扮演着越来越重要的角色,为用户提供了方便的学习和生活交流渠道。本研究旨在设计并实现一款基于Spring Boot框架的Android学习生活交流App,以促进用户之间的信息分享、学术交流和社交互动。 在需求分析阶段,我们明…

3 文本分类入门finetune:bert-base-chinese

项目实战: 数据准备工作 bert-base-chinese 是一种预训练的语言模型,基于 BERT(Bidirectional Encoder Representations from Transformers)架构,专门用于中文自然语言处理任务。BERT 是由 Google 在 2018 年提出的一…

Spring Boot的日志

打印日志 打印日志的步骤: • 在程序中得到日志对象. • 使用日志对象输出要打印的内容 在程序中得到日志对象 在程序中获取日志对象需要使用日志工厂LoggerFactory,代码如下: package com.example.demo;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public c…

【深度学习】迁移学习中的领域转移及迁移学习的分类

领域转移 根据分布移位发生的具体部分,域移位可分为三种类型,包括协变量移位、先验移位和概念移位 协变量移位: 在协变量移位的情况下,源域和目标域的边际分布是不同的,即ps(x)∕ pt(x),而给定x的y的后验分布在域之间…