Linux 文件操作(三) —— 获取并打印某个文件的属性(文件类型、执行权限、文件大小)

news2024/12/22 20:30:48

        目录

1、获取文件属性 stat / lstat / fstat

(1) 参数 path

(2) 参数 buf

(3) 返回值

2、获取并打印某个文件的属性

(1) 获取文件类型

(2) 获取文件权限

(3) 获取文件大小

(4) 获取上一次的访问时间

(5) 最终代码


1、获取文件属性 stat / lstat / fstat

stat / lstat / fstat 函数的作用是获取文件属性,stat 函数可以通过文件路径获取到任意文件(链接文件除外)的属性,lstat 获取的是链接文件的属性,fstat 是通过文件描述符获取到文件属性。

 下面以 stat 函数为例介绍参数和返回值

(1) 参数 path

输入型参数,代表文件所在路径。如果path对应的文件是一个符号链接,那么stat 获取到的是目标文件的属性,而不是链接文件的属性;如果要获取链接文件的属性,需使用 lstat。

(2) 参数 buf

输出型参数,获取到的文件属性会放入这个结构体中。结构体的大致定义如下:

(3) 返回值

成功返回 0,失败返回 -1

2、获取并打印某个文件的属性

假设我们有一个 log.txt文件,我们要获取这个文件的类型、访问权限、文件大小、上一次访问时间,最终完整代码访问最后,中间是一些零碎的代码。

(1) 获取文件类型

Linux提供了一些宏函数来判断是哪种文件类型

  • S_ISREG(st_mode)  :是否为常规文件?
  • S_ISDIR(st_mode)  :是否为目录?
  • S_ISCHR(st_mode)  :是否为字符设备?
  • S_ISBLK(st_mode)  :是否为块设备?
  • S_ISFIFO(st_mode) :是否为FIFO文件?
  • S_ISLNK(st_mode)  :是否为链接文件?
  • S_ISSOCK(st_mode) :是否为Socket文件?
# st 代表获取到的文件属性结构体
if(S_ISREG(st.st_mode))
    printf("-");
else if(S_ISREG(st.st_mode))
    printf("d");
else if(S_ISCHR(st.st_mode))
    printf("c");
else if(S_ISBLK(st.st_mode))
    printf("b");
else if(S_ISFIFO(st.st_mode))
    printf("p");
else if(S_ISLNK(st.st_mode))
    printf("l");
else         
    printf("s");        // 其他归为套接字文件类型

(2) 获取文件权限

其实Linux也提供了一些宏来判断该文件是否具备指定权限,但是我们要遍历该文件的所有权限,st_mode成员存储权限的方式是位图存储,每个权限对应 1bit ,我们可以通过移位来获取这九个权限。

int i = 8;
for(; i >= 0; i--)     
{
    if((st.st_mode >> i) & 1)    // 先判断有无权限
    {
        // 判断具体是哪一种权限
        if(i % 3 == 0)
        {
            printf("r");        // 读权限
        }
        else if(i % 3 == 1) 
        {
            printf("w");        // 写权限
        }
        else
        {
            printf("x);        // 执行权限
        }
    }
    else
    {
        printf("-");        // 无权限
    }
}

(3) 获取文件大小

printf(" %d", (int)st.st_size);

(4) 获取上一次的访问时间

获取时间需要使用 localtime 函数转换成我们可以识别的格式,localtime函数的声明如下:

 我们重点看返回的结构体定义,这里包含了我们需要的时间信息

struct tm t;
t = localtime(st.st_atime);
// 月是从0开始计的,所以要加 1
printf(" %d-%d-%d %d:%d",t.tm_year, t.tm_month+1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);

(5) 最终代码

#include <sys/types.h>
#include <time.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>

int main(){
	struct stat st;
	int ret = stat("./log.txt",&st);
	if(ret < 0)
	{
		perror("stat");
		return -1;
	}

	if(S_ISREG(st.st_mode))
		    printf("-");
	else if(S_ISREG(st.st_mode))
		    printf("d");
	else if(S_ISCHR(st.st_mode))
		    printf("c");
	else if(S_ISBLK(st.st_mode))
		    printf("b");
	else if(S_ISFIFO(st.st_mode))
		    printf("p");
	else if(S_ISLNK(st.st_mode))
		    printf("l");
	else         
		    printf("s");        
				
	int i = 8;
	for(;i >= 0; i--)
	{
		if((st.st_mode >> i) & 1)
		{
			if(i%3 == 2)
				printf("r");
			else if(i%3 == 1)
				printf("w");
			else
				printf("x");
		}
		else
			printf("-");
	}

	printf(" %d", (int)st.st_size);

	struct tm* t;
	t = localtime(&(st.st_atime));
	// 月是从0开始计的,所以要加 1
	printf(" %d-%d-%d %d:%d\n",t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min);
	
	return 0;
}

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

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

相关文章

[附源码]java毕业设计疫情防控期间网上教学管理

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

数据分析可视化之模型介绍

一 前言 “数据分析可视化”这条术语实现了成熟的科学可视化领域与较年轻的信息可视化领域的统一。 数据分析可视化&#xff1a;是指将大型数据集中的数据以图形图像形式表示&#xff0c;并利用数据分析和开发工具发现其中未知信息的处理过程。 数据可视化已经提出了许多方法&…

【软件工程导论】1.软件过程模型

软件过程模型什么是软件过程模型包括瀑布模型特点演化模型特点增量模型特点原型模型类型使用策略废弃策略追加策略螺旋模型特点什么是软件过程模型 又叫作软件开发模型、软件生存周期模型 包括 瀑布模型 每一阶段都会生成文档 特点 缺乏灵活性在交互使用时才能发现问题&…

用HTML+CSS仿网易云音乐网站(6个页面)_实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

ubuntu 安装 k8s 记录 2 初始化

ubuntu 安装 k8s 记录 2 初始化初ubuntu 安装 k8s 记录初始化初始化前置条件查询本机 ip需要docker初始化报错禁止 Swap 分区禁用 CRI重启 containerd重置节点初始化初始化报错设置驱动向 docker 看齐如果遇到出错要重新初始化&#xff0c;先执行下面两个步骤关闭 swap 并重新设…

业务增长遇到瓶颈?这些用大数据驱动业务增长的方法你一定要看看

目录 前言 一、海量数据处理方案 1.1 大数据存储 1.1.1 传统数据存储 1.1.2 云大数据仓库 1.2 数据BI快速展示 1.2.1大数据BI产业链结构分析 1.2.2 华为一站式大数据BI方案 前言 随着大数据与云原生的快速发展融汇交互&#xff0c;各技术领域又将来临新一波迅雷之势的挑…

数据增强

在训练数据拆分上评估数据增强&#xff0c;以增加高质量训练样本的数量。 Intuition 通常希望通过数据扩充来增加训练数据的规模和多样性。它涉及使用现有样本生成合成但真实的示例。 拆分数据集。想首先拆分数据集&#xff0c;因为如果允许将生成的样本放置在不同的数据拆分中…

HTML+CSS+JS环境保护网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

FEDformer 代码分析(2)

首先总结一下FEDformer里面这些这些东西&#xff0c; mean的尺寸是&#xff1a;&#xff08;1,96,7&#xff09; seasonal_init的尺寸是&#xff1a;&#xff08;1,144,7&#xff09; trend_init的尺寸是&#xff1a;&#xff08;1,144,7&#xff09; zeros的尺寸是&#x…

[附源码]java毕业设计疫苗接种管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

四、图片特效

目录一、灰度处理二、颜色反转三、马赛克四、毛玻璃五、图片融合六、边缘检测与浮雕效果1 - 边缘检测2 - 浮雕效果七、颜色映射八、油画效果一、灰度处理 使用openCV的imread方法实现 import cv2img0 cv2.imread(image0.jpg, 0) img1 cv2.imread(image0.jpg, 1) print(img0…

嵌入式学习笔记(1)基本知识、C语言常用关键字、OLED

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低&#xff0c;是一款经典的嵌入式微控制器 STM32F103C8T6 系…

windows + anaconda 安装PySpark3.0.1

1、背景 Spark作为分布式内存计算框架&#xff0c;可以广泛应用在数据处理、分析等应用场景。因此&#xff0c;希望借助Spark高性能的处理项目中的数据&#xff0c;搭建此开发环境&#xff0c;深入了解Spark的处理能力与实现机制。 2、开发环境 在windows10上使用Anaconda作为…

微信小程序使用github协作

微信小程序github协作所需相关设置 1.点击开发工具右上角的版本管理初识化本地仓库&#xff1a; 2.去github新建一个仓库&#xff0c;复制仓库的ssh的url添加到仓库设置中的远程连接中&#xff1a; 3.在仓库设置中的通用里设置好自己的用户名和邮箱 4.生成ssh key 由于我们使…

web前端网页制作课作业——用DIV+CSS技术设计的家乡旅游主题网站

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

Metabase学习教程:视图-3

掌握条形图可视化 创建条形图并使用可视化设置对其进行自定义。 我们看看创建条形图和编辑条形图的设置&#xff0c;然后谈谈堆积条形图。 创建条形图 您可以使用元数据库的示例数据库。选择新的>问题>原始数据>示例数据库。选择示例数据库的Orders表作为您的数据…

腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf

前言 有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台…

使用XShell、XFTP连接虚拟机或者服务器教程

文章目录前期准备安装建立连接XFTP部分前期准备 官方网站下载 需要购买&#xff0c;但是我记得我好像是通过邮件发送过来的&#xff0c;应该是那个30天试用版&#xff0c;要是不会操作的话可以评论私我发你网盘。 安装 打开安装包(xshell / xftp &#xff0c;两个软件的安装步…

SpringBoot SpringBoot 开发实用篇 6 监控 6.2 SpringBoot Admin

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.2 SpringBoot Admin6.2.1 可视化监控平台6.2.2 SpringBoot A…

论文阅读-Joint Audio-Visual Deepfake Detection(音视频Deepfake检测)

一、论文信息 论文名称&#xff1a;Joint Audio-Visual Deepfake Detection 会议&#xff1a;ICCV2021 作者团队&#xff1a; 二、动机与创新 动机 Visual deepfake上有许多检测方法和数据集&#xff0c;而对audio deepfake以及visual-audio两种模式之间的deepfake方法较少…