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

操作系统真相还原:获取文件属性

14.15 获得文件属性

14.15.1 ls命令的幕后功臣

ls 命令中调用了大量的系统调用 stat64write ,其中stat64 用于获得文件的属性信息, write 用于把信息输出到屏幕,即标准输出。这里的 stat64 表示 64 位版本的 stat。 其函数原型是int stat(const char* path, struct stat *buf)

14.15.2 实现sys_stat

先增加记录文件属性的结构体:

/* 文件属性结构体 */
struct stat
{uint32_t st_ino;             // inode编号uint32_t st_size;            // 尺寸enum file_types st_filetype; // 文件类型
};
//定义在fs.h

咱们的 struct stat 很简单,只有 3 个成员,因此只能获得 3 个属性。

/* 在buf中填充文件结构相关信息,成功时返回0,失败返回-1 */
int32_t sys_stat(const char *path, struct stat *buf)
{/* 若直接查看根目录'/' */if (!strcmp(path, "/") || !strcmp(path, "/.") || !strcmp(path, "/..")){buf->st_filetype = FT_DIRECTORY;buf->st_ino = 0;buf->st_size = root_dir.inode->i_size;return 0;}int32_t ret = -1; // 默认返回值struct path_search_record searched_record;memset(&searched_record, 0, sizeof(struct path_search_record)); // 记得初始化或清0,否则栈中信息不知道是什么int inode_no = search_file(path, &searched_record);if (inode_no != -1){struct inode *obj_inode = inode_open(cur_part, inode_no); // 只为获得文件大小buf->st_size = obj_inode->i_size;inode_close(obj_inode);buf->st_filetype = searched_record.file_type;buf->st_ino = inode_no;ret = 0;}else{printk("sys_stat: %s not found\n", path);}dir_close(searched_record.parent_dir);return ret;
}

sys_stat:接受 2 个参数,待获取属性的文件路径 path、存储属性的缓冲区 buf,功能是在 buf 中填充文件结构相关信息,成功时返回 0,失败返回-1 。

首先判断是不是根目录,然后在调用search_file获得该路径对应的inode索引,然后调用inode_open将该inode调入内存,将属性直接写在buf中。

相关文章:

操作系统真相还原:获取文件属性

14.15 获得文件属性 14.15.1 ls命令的幕后功臣 ls 命令中调用了大量的系统调用 stat64 和write ,其中stat64 用于获得文件的属性信息, write 用于把信息输出到屏幕,即标准输出。这里的 stat64 表示 64 位版本的 stat。 其函数原型是int sta…...

聚鼎装饰画:投资一家装饰画店铺要花费多少钱

在艺术的殿堂里,每一幅装饰画都是静默的诗篇,而开设一家装饰画店铺,便是将这份静谧与美好呈现给世界的开始。然而,背后的投资成本,却是一笔需要精打细算的账。 店铺的选址,犹如画家挑选画布,至关…...

编程的魅力、其重要性、学习方法以及未来趋势

在数字化时代,编程已不仅仅是程序员的专属技能,它逐渐渗透到我们生活的方方面面,成为连接现实与虚拟世界的桥梁。从日常使用的智能手机应用到探索宇宙奥秘的超级计算机,编程的力量无处不在。本文将深入探讨编程的魅力、其重要性、…...

ubuntu init set

1 cuda驱动 cuda use not open test 自己下载安装 以上操作后可能是核显卡,需要执行下列进入独立显卡,才能进行HDMI链接 sudo prime-select nvidia sudo prime-select intel prime-select query 该命令用于查看目前的显卡使用模式,可以看到…...

MySQL数据分析进阶(八)存储过程

※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!) 【中字】SQL进阶教程 | 史上最易懂S…...

最深的根,

1498. 最深的根 题目 提交记录 讨论 题解 视频讲解 一个无环连通图可以被视作一个树。 树的高度取决于所选取的根节点。 现在,你要找到可以使得树的高度最大的根节点。 它被称为最深的根。 输入格式 第一行包含整数 NN,表示节点数量。 节点…...

【常见的设计模式】工厂模式

【设计模式专题之工厂方法模式】2.积木工厂   题目描述 小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。   输入描述 输入的第一行是一个整数 N(1 …...

postgres收缩工具两种工具的使用对比

postgres收缩工具安装和使用 第一章 需要使用插件处理膨胀的原因 Postgresql通过数据多版本实现MVCC,现象是删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的OLTP系统,会造成数据膨胀。 PG数据库本身有处理膨胀问题的vacuum工…...

仿真入门——CST软件如何设置分布式计算的共享储存

在 CST Studio Suite 的分布式计算中,常有用户因为某台机器的网络问题丢失某个数据。这里介绍一种方法,可以在使用分布式计算或 MPI 计算时设置共享存储。在这种情况下,不涉及文件传输,所有文件操作都在共享文件的媒介上完成。 数…...

【JVM基础17】——实践-说一下JVM调优工具

目录 1- 引言:2- ⭐核心:2-1 命令工具jpsjstackjmapjstat 2-2 可视化工具jconsoleVisualVM 3- 小结:3-1 说一下 JVM 调优的工具 1- 引言: 命令工具 jps——进程状态信息jstack——查看Java进程内线程的堆栈信息jmap——查看堆转…...

【QT】Qt中Websocket的使用

一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,…...

【vue3】【elementPlus】【国际化】

1.如需从0-1开始,请参考 https://blog.csdn.net/Timeguys/article/details/140995569 2.使用 vue-i18n 模块: npm i vue-i18n3.在 src 目录下创建 locales 目录,里面创建文件:en.js、zh-cn.js、index.js 语言js文件:…...

用python实现求两个整数的最大公约数

def gcd(a, b): """计算最大公约数""" while b: a, b b, a % b return abs(a) 下面是对 gcd 函数的逐行解释: def gcd(a, b):"""计算最大公约数"""定义函数:这里定义了一个名为 gcd…...

Linux 内核源码分析---proc 文件系统

proc文件系统 进程数据文件系统(process data filesystem, procfs)装载在 /proc,缩写为 procFS。 proc 文件系统是一种虚拟文件系统,其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统&…...

视频号直播回放怎么下载?

一、如果是下载自己直播回放视频: 方法一:视频号助手 打开网址:视频号助手 登陆账号后。下面路径,先点击成回放, 后就可以在下面路径,下载全场回放 但是这种有个缺点,就是不能分段下载。这样…...

【第九节】python中xml解析和json编解码

目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…...

yolo v8部署到云服务器问题记录

环境安装 1、运行项目报错:no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了,安装了GPU版本,需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...

端口被占用,杀死进程的步骤

一、 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano可以查看所有进程 二、查看占用指定端口的程序 查看被那个端口占用,可以用该命令: 三、使用命令杀死进程 杀死进程,使用命令:...

接口入门(企业常见使用,一分钟搞定版)

目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下: 1、接口的定义 定义位置 可以写在类中,但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…...

深入解析:Cookie 与 Session 的区别及应用场景

引言 在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过…...

FLUX.1-schnell:如何彻底改变文本到图像生成的技术范式

FLUX.1-schnell:如何彻底改变文本到图像生成的技术范式 【免费下载链接】FLUX.1-schnell 项目地址: https://ai.gitcode.com/hf_mirrors/black-forest-labs/FLUX.1-schnell 在当今人工智能图像生成领域,高质量图像创作一直面临着效率与质量难以兼…...

从「投稿难」到「录用快」:Paperxie 期刊论文智能写作,解锁学术发表新效率

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 引言:学术发表的「拦路虎」,AI 正在重构发表逻辑 对于科研人而言,期…...

Testsigma自动化测试平台深度解析:AI协同测试架构设计与实践指南

Testsigma自动化测试平台深度解析:AI协同测试架构设计与实践指南 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve qua…...

5分钟掌握Switch破解神器TegraRcmGUI:新手也能轻松上手的图形化注入教程

5分钟掌握Switch破解神器TegraRcmGUI:新手也能轻松上手的图形化注入教程 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 还在为Switch破解的复杂…...

虚拟线程调度开销被严重低估?JVM源码级剖析vthread park/unpark的纳秒级损耗与4种对冲方案

第一章:虚拟线程调度开销被严重低估?JVM源码级剖析vthread park/unpark的纳秒级损耗与4种对冲方案虚拟线程(Virtual Thread)虽以轻量著称,但其 park/unpark 操作在 JVM 内部并非零成本——HotSpot 17 中,每…...

DeepSeek-V3算法优化实战:降低推理延迟的10种方法

DeepSeek-V3算法优化实战:降低推理延迟的10种方法 1. 引言 在人工智能应用快速发展的今天,模型推理速度往往成为决定用户体验的关键因素。DeepSeek-V3作为先进的大语言模型,虽然在生成质量上表现出色,但在实际部署中常常面临推理…...

vLLM-v0.11.0完整指南:从环境搭建到Qwen3-VL-4B服务调用全流程

vLLM-v0.11.0完整指南:从环境搭建到Qwen3-VL-4B服务调用全流程 1. 环境准备与快速部署 1.1 硬件与系统要求 要运行vLLM-v0.11.0并部署Qwen3-VL-4B模型,建议满足以下硬件配置: 显卡:NVIDIA GPU(推荐RTX 4060 Ti 16G…...

​从散户到 “跟庄” | 职业交易者的聪明金钱心法 :看结构、抓流动性,提高胜率!​

从散户到 “跟庄” | 职业交易者的聪明金钱心法 :看结构、抓流动性,提高胜率! 聪明金钱概念是交易中能帮你建立巨大盈利优势的核心逻辑——它能让你看透价格走势的本质,精准找到高盈亏比入场点,而不是被表面波动牵着走。 今天就把聪明金钱的核心逻辑、实战方法和交易设置…...

制造业企业怎样用好数据智能?聚焦排产、质检与能耗三大场景

过去,某电池工厂的生产计划员每周一都要花两天时间,手动协调数十台设备、上百种物料和几十个订单。稍有变动,整个排产表就要推倒重来。如今,同样的工厂,排产效率提升了600%,周计划达成率稳定在99%以上。这种…...

5个AI Skill实测:影视内容创作全流程自动化

为什么AI助手的能力上限取决于你装了什么Skill养虾必装的5个Skill,影视博主效率翻倍你的小龙虾(OpenClaw/CodeBuddy/Windsurf)装了几个Skill?很多人养虾只用来写代码、查资料,但其实用小龙虾做内容创作、数据分析、批量…...