Linux笔记 --- 文件属性

news2024/9/22 5:34:01

        在操作文件时时常要获取文件的属性,比如类型、大小、权限、所有者等等信息,这些信息对于文件的传输管理等非常重要,而这些信息则可以通过下面这些函数获取。

这三个函数功能相同,区别在于,stat参数是文件名字,fstat参数则是一个被打开的文件描述符,而lstat则可以获取链接文件本身的属性 

 该结构体中有很多成员的含义和作用是一目了然的,比如:
1,文件索引号:stio,实质上是一个无符号整形数据,用来唯一确定分区中的文件。
2,引用计数:st nlink,记录该文件的名字(或叫硬链接)总数,文件的别名可以用
命令ink或者函数ink()来创建。当一个文件的引用计数st_nlink为零时,系统将会释放
清空该文件锁占用的一切系统资源。
3,文件所有者UID和所属组GID。
4,文件的大小。这个属性对只对普通文件有效。
5,文件所占数据块数目st blocks,表明该文件实际占用存储器空间。一个数据块一
般为512字节。
6,st atime、st_mtime和st ctime都是一个文件的时间戳,st atime代表文件
被访问了但是没有被修改的最近时间,st_mtime代表文件内容被修改的最近时间,
st ctime则代表了文件属性更改的最近时间。文件的时间戳对于某些场合来讲是至关重要
的属性,比如工程管理器make,他的工作原理就完全基于文件的时间戳上,判断文件的被
修改时间,决定其是否参与编译。
7,st blksize是所谓的“写数据块”的建议值,因为当应用程序频繁地往存储器写入
小块数据的时候,可能会导致效率的低下。

除此之外,st_dev、st_rdev和st_mode就没那么一目了然了,他们详细情况如下:

1,文件设备号。

        属性结构体stat中有两个成员涉及文件的设备号,他们分别是 st_dev和 st_rdev,前者只对普通文件有效,它包含了普通文件所在的设备的设备号,因此这个成员对于特殊文件而言是无意义的。而st_rdev恰好相反,他储存的是特殊设备文件本身的设备号,因此st_rdev对于普通文件而言是无效的。

        那什么是设备号呢?我们在系统/dev目录下执行一下ls—l一看究竟:

从上面的执行结果看到,在/dev下的文件没有“大小”的属性,而只有两个号码,比如文件tty,设备号为5,0,其中前面的5是所谓的主设备号,用来标识一种设备的类型,后面的0是所谓的次设备号,用来区分本系统中的多个同类设备。

设备号在编写设备文件的驱动程序中才需要用到,在应用编程中不需要关注。st_dev和st_rdev里面都包含了主次设备号,需要用到下面的函数来获取:

2,文件类型和权限

属性成员中的st_mode里面包含了文件类型和权限,st_mode实质上是一个无符号16位短整型数,各个位域所包含的含义如下:

st_mode[0:8]一一对应地代表了文件的各个用户的权限。

st_mode[9]存储了所谓的黏住位(只对目录有效),在拥有该目录的写权限的情况下,如果这一位被设置为1,那么某一用户也只能删除在本目录下属于自己的文件,否则可以删除任意文件。

st_mode[10]和 st_mode[11]分别用来设置文件的suid(只对普通文件有效)和sgid(只对目录有效)。如果suid被设置为1,则任何用户在执行该文件的时候均会获得该文件所有者的临时授权,即其有效UID将等于文件所有者的UID。如果sgid被设置为1,则任何在该目录下执行的程序均会获得该目录所属组成员的临时授权,即其有效GID将等于该目录的所属组成员的GID。

st_mode[12:15]用以标识Linux下不同的文件类型,由于Linux总共只有7种文件类型,因此4位足以表达。

下面的表格是 st_mode的详细信息:

可以将st_mode与S_IFMT相与得到的数据用于判断文件类型

 同时判断文件的类型不是必须读取st_mode高四位,也可以使用一些宏定义

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git的下载与安装(Windows)

Git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS),它以其高效、灵活和强大的功能,在现代软件开发中扮演着至关重要的角色。 git官网:Git (git-scm.com) 1.进入git官网 2…

[图解]用例规约之扩展路径

1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…

【题解】【高精度】—— [NOIP2003 普及组] 麦森数

【题解】【高精度】—— [NOIP2003 普及组] 麦森数 [NOIP2003 普及组] 麦森数题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.题意解析1.1.求位数1.2.输出最后500位1.2.1.输出1.2.2.高精度乘法1.2.3.快速幂 2.AC代码 [NOIP2003 普及组] 麦森数 题目描述 形如 2…

(一)C++学习笔记(满满的都是水货咕噜!)

1、基本概念 1 – 什么是C c就是c语言的扩展,完全兼容c语言 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效,简洁,快速和可移植的传统。 c融合了3种不同的编程方式: c语言代表的过程性语言. c在c语言基础上添加…

爬虫 Web Js 逆向:RPC 远程调用获取加密参数(2)使用 JsRPC 框架

RPC (Remote Procedure Call) 是远程调用的意思。 在 Js 逆向时,本地可以和浏览器以服务端和客户端的形式通过 WebSocket 协议进行 RPC 通信,这样可以直接调用浏览器中的一些函数方法,不必去在意函数具体的执行逻辑,可以省去大量的…

苹果macOS 15 Sequoia投屏功能 实现Mac上iPhone桌面管理

8月14日消息,苹果最新的 iOS 18 和 macOS 15 Sequoia 测试版为 iPhone 投屏功能带来了重大更新。用户可以直接在 Mac 上管理 iPhone 桌面。 iPhone 镜像功能 macOS Sequoia最大的更新是带来了iPhone 镜像功能,这个功能能让给 Mac 用户将 iPhone 的屏幕镜…

免费版音频格式转换器哪个好用?6大热门工具对比

在数字音频领域,音频格式转换已成为日常生活和工作中必不可少的一部分。无论是为了适配不同的设备,还是为了压缩音频文件以节省存储空间,音频格式转换器都能为我们提供极大的便利。市面上有众多免费版音频格式转换器,但哪些工具真…

【向量数据库】Ubuntu编译安装FAISS

参考官方的安装指导:https://github.com/facebookresearch/faiss/blob/main/INSTALL.md,不需要安装的可以跳过 ~$ wget https://github.com/facebookresearch/faiss/archive/refs/tags/v1.8.0.tar.gz ~$ tar -zxvf v1.8.0.tar.gz ~$ cd faiss-1.8.0 ~$ …

舵机模块学习

舵机是一种根据输入PWM信号占空比来控制输出角度的装置 执行逻辑:PWM信号输入到控制板,给控制版一个指定的目标角度,然后电位器检测输出轴的当前角度,如果大于目标角度,电机反转,小于正转,最终使…

Yearning开源SQL审核平台本地Linux系统部署与远程登录语句审核

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 本文主要介绍在 Linux 系统简单部署 Yearning 并结合 cpolar 内网穿透工具实现远程访问,破除…

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task01 DeepSeek简易AI助手

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向 Task01 正处于拿毕业证求职和实习离职期间的过渡期,想着闲着也是闲着,索性拉上本科同学队友报名参加AI比赛,想方设法卷个项目经验出来。 Task1的任务主要是体验从0开始搭建一个AI对…

联想季度收入强劲增长,全球PC市场回暖

联想季度收入显著增长 2024年8月14日,北京——中国科技巨头联想集团公布了其第一季度财报,收入同比增长20%,达到了154亿美元。这一增幅超过了LSEG调查分析师预期的141亿美元。这一财报标志着联想在经历了连续五个季度的收入下滑后&#xff0…

seata的使用(SpringBoot项目整合seata)

文章目录 1、解压 seata-server-1.7.1.zip2、启动 双击 seata-server.bat3、启动 seata 控制台用户界面4、所有分布式事务相关数据库要有undo-log5、项目引入seata依赖6、项目添加seata配置7、代码实现: 1、解压 seata-server-1.7.1.zip 2、启动 双击 seata-server.…

基于springboot在线课程管理系统的设计与实现

TOC springboot236基于springboot在线课程管理系统的设计与实现 绪论 1.1 选题背景 目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平,影响人们的生活…

上万张看图背单词图片英语图片#看图猜单词#

看图背英语类的数据没有搞到很多的,之前只有《800多小学生看图背单词ACCESS数据库》以及其他一些几百条的记录,而今天弄到了上万英语单词的图片,今天这份数据只有图片没有其他的数据,你可以使用其他的英语单词数据库和图片进行关联…

群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…

零基础学习Redis(2) -- Redis安装与配置

Redis官方是并不支持Windows系统的,并且现在绝大部分公司都是使用的Linux,所以我们在Linux上进行安装,这里我使用的是Ubuntu 1. 安装步骤 1. 首先使用工具连接到我们的云服务器,然后输入apt指令搜索redis相关的软件包&#xff1…

【扒代码】roi_align的定义

这段代码是一个名为 roi_align 的函数的部分实现,它用于执行区域兴趣(RoI)对齐操作,通常用于计算机视觉任务中,例如目标检测和分割。这个函数的主要目的是从输入特征图中提取特定区域,并将这些区域调整到指…

8.14 Day19 Windows服务器(Windows service 2008 R2)上域的搭建 (2)

1、在活动目录中创建OU 2、OU的规划例题: 在新添加的域控制器中,使用“Active Directory用户和计算机”创建北京分公司的OU,并创建市场部、技术部和财务部等三个子OU。 若真要删除,则如下操作: 所有OU规划完成 3、域…

Docker Containerd初体验

Docker Containerd概述 ​ Containerd是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为了一个独立的项目,被纳入了Cloud Native Computing Foundation(C…