文件IO 文件属性获取,目录操作

news2024/10/6 16:21:01

文件属性获取

int stat(const char *path, struct stat *buf);
功能:获取文件属性

参数:
path:文件路径名
buf:保存文件属性信息的结构体

返回值:
成功:0
失败:-1

struct stat {
	ino_t     st_ino;     /* inode号 */
	mode_t    st_mode;    /* 文件类型和权限 */
	nlink_t   st_nlink;   /* 硬链接数 */
	uid_t     st_uid;     /* 用户ID */
	gid_t     st_gid;     /* 组ID */
	off_t     st_size;    /* 大小 */
	time_t    st_atime;   /* 最后访问时间 */
	time_t    st_mtime;   /* 最后修改时间 */
	time_t    st_ctime;   /* 最后状态改变时间 */
};

目录操作

//围绕目录流进行操作,DIR*

DIR *opendir(const char *name);
功能:获得目录流
参数:要打开的目录
返回值:
成功:目录流
失败:NULL

struct dirent *readdir(DIR *dirp);
功能:读目录
参数:要读的目录流
返回值:
成功:读到的信息    
败或读到目录结尾:NULL

返回值为结构体,该结构体成员为描述该目录下的文件信息
struct dirent {
ino_t   d_ino;               /* 索引节点号*/
off_t   d_off;               /*在目录文件中的偏移*/
unsigned short d_reclen;     /* 文件名长度*/
unsigned char  d_type;       /* 文件类型 */
char    d_name[256];         /* 文件名 */
};


int closedir(DIR *dirp);
功能:关闭目录
参数:dirp:目录流

使用上面的函数,结合帮助手册

想要查询stat可以使用下面命令

man 2 stat

想查看C语言函数库中的某个函数的手册,可以使用以下命令

man 3 函数名

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>

void ls(const char *path) {
    DIR *dir;
    struct dirent *entry;
    struct stat file_stat;
    
    // 打开目录
    dir = opendir(path);
    if (dir == NULL) {
        perror("opendir");
        return;
    }
    
    // 读取目录中的文件
    while ((entry = readdir(dir)) != NULL) {
        // 获取文件的详细信息
        char file_path[256];
        sprintf(file_path, "%s/%s", path, entry->d_name);
        if (stat(file_path, &file_stat) == -1) {
            perror("stat");
            continue;
        }
        
        // 获取文件权限
        char perms[11];
        perms[0] = (S_ISDIR(file_stat.st_mode)) ? 'd' : '-';
        perms[1] = (file_stat.st_mode & S_IRUSR) ? 'r' : '-';
        perms[2] = (file_stat.st_mode & S_IWUSR) ? 'w' : '-';
        perms[3] = (file_stat.st_mode & S_IXUSR) ? 'x' : '-';
        perms[4] = (file_stat.st_mode & S_IRGRP) ? 'r' : '-';
        perms[5] = (file_stat.st_mode & S_IWGRP) ? 'w' : '-';
        perms[6] = (file_stat.st_mode & S_IXGRP) ? 'x' : '-';
        perms[7] = (file_stat.st_mode & S_IROTH) ? 'r' : '-';
        perms[8] = (file_stat.st_mode & S_IWOTH) ? 'w' : '-';
        perms[9] = (file_stat.st_mode & S_IXOTH) ? 'x' : '-';
        perms[10] = '\0';
        
        // 获取文件所有者
        struct passwd *pw = getpwuid(file_stat.st_uid);
        char *owner = (pw != NULL) ? pw->pw_name : "";
        
        // 获取文件所属组
        struct group *gr = getgrgid(file_stat.st_gid);
        char *group = (gr != NULL) ? gr->gr_name : "";
        
        // 获取文件大小
        off_t file_size = file_stat.st_size;
        
        // 获取文件最后修改时间
        char *time_str = ctime(&file_stat.st_mtime);
        time_str[strlen(time_str)-1] = '\0';  // 去除换行符
        
        // 打印文件信息
        printf("%s\t%ld\t%s\t%s\t%lld\t%s\n", perms, file_stat.st_nlink, owner, group, file_size, time_str);
    }
    
    // 关闭目录
    closedir(dir);
}

int main() {
    ls(".");  // 传入要列出文件的目录
    return 0;
}

 结果验证:

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

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

相关文章

springboot项目创建整个完成过程和注意事项

1&#xff1a;application.yml文件配置 server:port: 8088servlet:context-path: /test spring:datasource:name: text #????url: jdbc:mysql://localhost:3306/dsdd?serverTimezoneGMT&useUnicodetrue&characterEncodingutf-8&useSSLtrueusername: root #…

java模拟MQTT客户端发送消息及EMQX配置

EMQX配置 登录地址 首先打开EMQX的管理界面&#xff0c;界面的地址如下&#xff0c; http://192.168.1.110:18083/ 规则是IP就是MQTT的IP&#xff0c;端口是固定的18083&#xff0c;输入该地址后&#xff0c;展示界面如下&#xff1a; 然后输入用户名和密码&#xff0c;用户…

0132 数据的表示和运算1

目录 2.数据的表示和运算 2.1数制与编码 2.1部分习题 2.数据的表示和运算 2.1数制与编码 2.1部分习题 1.若定点整数为64位&#xff0c;含1位符号位&#xff0c;则采用补码表示的最大值最大的负数为&#xff08;&#xff09; A. B. C. D. 2.若x的补…

戴佩妮《随风所遇》世界巡回演唱会内地首站八月启动,乘风归来,相遇之约!

今日&#xff0c;戴佩妮(Penny)《随风所遇2023 Drift World Tour》世界巡回演唱会正式官宣内地首站&#xff0c;8月26日登陆南京太阳宫剧场。自2016年《贼》世界巡回演唱会之后&#xff0c;华语乐坛唱作人戴佩妮乘著所有粉丝期待的“风”回来&#xff0c;并带来曲目、造型等方面…

如何理解操作系统?(Operator System)

文章目录 一.什么是操作系统二.操作系统的层状结构三.操作系统如何管理 一.什么是操作系统 先入为主&#xff0c;操作系统是一款管理软件 操作系统分为两部分 操作系统本身&#xff0c;主要做一些进程管理、内存管理、文件管理、驱动管理等工作&#xff0c;这种核心部分叫做…

归并排序递归与非递归

基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&a…

Jenkins (二)

Jenkins (二) 使用pipeline script 简单编译 发布war工程到远程tomcat中 配置所需 下载 apache-maven-3.9.3.tar.gz 解压 apache-maven-3.9.3-bin.tar.gz 拷贝到 docker jenkins 镜像里 $ docker cp apache-maven-3.9.3 37259c708ca1:/home/下载apache-tomcat-8.5.91.tar.gz …

压测工具之JMeter使用

文章目录 前言压测工具如何使用启动JMeter工具开始创建测试环境1、创建线程组2、配置元件3、构造HTTP请求4、添加HTTP请求头信息 5、添加断言6、添加查看结果树7、添加聚合报告信息8、测试计划创建完成了 执行测试计划 前言 最近公司项目需要进行压测&#xff0c;查验S A A S …

7.18训练总结

考场错误&#xff1a; 今天是一套neerc的题&#xff0c;难度相对较大&#xff0c;我犯的低级错误比较少&#xff0c;但是对于题目顺序的把握能力&#xff0c;应该提高&#xff0c;尝试去做自己擅长的题目&#xff0c;而不是跟着别人的开题顺序&#xff0c;这样能够更顺畅吧。 …

实验室LIMS系统检测工作流程

LIMS系统检测工作流程 检测工作流程是LIMS核心内容&#xff0c;通过检测工作管理可加强协同工作能力、进一步强化质量控制环节、提高数据报出速度&#xff0c;提高工作效率、减低数据出错率&#xff0c;保证质量记录的完整、监控规范的执行&#xff1b;检测流程以样品检测为主…

Jenkins | 获取凭证密码

目录 方法一&#xff1a;查看所有账号及密码 方法二&#xff1a;查看指定账号密码 方法一&#xff1a;查看所有账号及密码 Jenkins > 系统管理 > 脚本命令行 com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{i…

element-ui message消息提示组件 ①延长提示消息在页面停留时间②提示消息换行

以实现下面的效果为示例 完整代码&#xff1a; let msgList ["数据1被引用", "数据2被引用"];// 使用html的换行标签拼接信息&#xff0c;默认行距太小&#xff0c;此处用两个<br/><br/>let message 以下数据不能删除&#xff0c;原因是&…

【Spring core学习四】Bean作用域和生命周期

目录 一、Bean的作用域 &#x1f308;1、被修改的Bean值现象 &#x1f308;2、 Bean 的 6 种作⽤域 &#x1f308;3、设置作用域 二、Spring的执行流程 三、Bean的生命周期 &#x1f308;1、Bean生命周期的过程 &#x1f308;2、演示生命周期 一、Bean的作用域 &…

[MySql]JDBC编程

JDBC&#xff0c;即Java Database Connectivity&#xff0c;java数据库连接。是一种用于执行SQL语句的Java API&#xff0c;它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成&#xff0c;它为Java开发人员操作数据库提供了一个标准的API&…

全域Serverless化,华为云引领下一代云计算新范式

近日&#xff0c;华为开发者大会2023&#xff08;Cloud&#xff09;在东莞成功举办&#xff0c;期间“全域Serverless化&#xff0c;引领下一代云计算新范式”专题论坛人气满满。华为云首席产品官方国伟携手业界专家、客户、伙伴&#xff0c;面向广大开发者&#xff0c;分享了在…

Authing 身份云上线数据对象管理(元数据),助力企业构建唯一身份源

在身份管理领域&#xff0c;元数据具有重要的作用和价值。元数据有助于理解数据的结构和意义&#xff0c;提升数据处理效率&#xff1b;促进跨部门、跨组织的数据共享和协作&#xff1b;以及支持数据分析&#xff0c;为业务决策提供支持等。当前&#xff0c;Authing 身份云已经…

在ICC/ICC2/FC中运行Calibre

1. which calibre找到calibre的安装目录 > which calibre > /eda/mentor/ixl_cal_version/bin/calibre 2. 在 /eda/mentor/ixl_cal_version目录下使用find ./* -name "icc_calibre.tcl",找到icc_calibre.tcl 3. 打开icc_calibre.tcl里面有不同工具(ICC2/FC/…

《Linux0.11源码解读》理解(五) head之开启分页

先回顾一下地址长度以及组合的演变&#xff1a;16位cpu意味着其数据总线/寄存器也是16位&#xff0c;但是地址总线&#xff08;寻址能力&#xff09;与此无关&#xff0c;可能是20位。可以参考&#xff1a;cpu的位宽、操作系统的位宽和寻址能力的关系_cpu位宽_brahmsjiang的博客…

C++——map和set(multimap和multiset)

目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 multiset 3.2.1 multiset的介绍 3.2.2 multiset的使用 3.3 map 3.3.1 map的介绍 3.3.2 map的使用 3.4 multimap 3.4.1 multimap的介绍 3.4.2 multimap的使用 …

抖音小店选品攻略:10个技巧助你选择助轻松学会选品技巧

抖音小店是目前非常火爆的电商平台之一&#xff0c;许多商家都希望能在抖音上开设自己的小店。而在开设抖音小店之前&#xff0c;选品是一个非常重要的环节。下面是不若与众总结的一些抖音小店选品技巧&#xff0c;希望能帮助到你。 1. 确定目标受众&#xff1a;在选品之前&…