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

文件属性获取

int stat(const char *path, struct stat *buf);
功能:获取文件属性参数:
path:文件路径名
buf:保存文件属性信息的结构体返回值:
成功:0
失败:-1struct 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);
功能:获得目录流
参数:要打开的目录
返回值:
成功:目录流
失败:NULLstruct 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.hqwc.cn/news/28290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批发小程序怎么做

批发订货小程序功能介绍 我们的批发订货小程序是一个集订货浏览权限、一客一价、业务员端口、代客下单、订单汇总和订单打印等功能于一体的专业平台。以下是对这些功能的详细描述&#xff1a; 1. 订货浏览权限&#xff1a;我们的小程序可以为不同用户分配不同的订货浏览权限。…

在LLM的支持下使游戏NPC具有记忆化的方法

问题 使用GPT这样的LLM去处理游戏中的NPC和玩家的对话是个很好的点子&#xff0c;那么如何处理记忆化的问题呢。 因为LLM的输入tokens是有限制的&#xff0c;所以伴随着问题的记忆context是有窗口大小限制的&#xff0c;将所有的记忆输入LLM并不现实。 所以这里看到了stanfo…

TOWE智能PDU是如何帮助机房安然度夏的?

最近&#xff0c;全国各地纷纷进入高温“火炉”模式&#xff0c;炎炎夏日&#xff0c;数据中心的工作温度不应该超过一定的限度。数据中心机房不仅要确保在高温多雨天气下安全、稳定的运维&#xff0c;还要承受降低企业总体运营成本的压力。这种需求下&#xff0c;相较于传统基…

【Matlab】智能优化算法_遗传算法GA

【Matlab】智能优化算法_遗传算法GA 1.背景介绍2.数学模型3.文件结构4.详细代码及注释4.1 crossover.m4.2 elitism.m4.3 GeneticAlgorithm.m4.4 initialization.m4.5 Main.m4.6 mutation.m4.7 selection.m4.8 Sphere.m 5.运行结果6.参考文献 1.背景介绍 遗传算法&#xff08;Ge…

Python基础合集 练习28 (数值运算函数)

from this import d x -120 x的绝对值 x1 abs(x) 同时输出商和余数 y 7 y1 divmod(x1, y) print(y1) /进行幂余运算 z可以省略 (x**y)%z pow(x,y[,z]) pow(3, pow(3, 99), 10000) 四舍五入函数 d是保留小数位数&#xff0c;默认为0 round(x,[,d]) print(round…

uniapp安卓签名证书生成,签名证书的SHA1,SHA256,MD5获取

uniapp安卓证书生成有两种方式&#xff0c;一种是去dcloud开发者中心生成证书&#xff0c;另一种是安装jre环境&#xff0c;自己生成证书 第一种 dcloud生成证书 去该项目对应的应用处&#xff0c;生成证书需要等几分钟&#xff0c;生成后可以查看证书信息 第二种 自己生成…

05-1_Qt 5.9 C++开发指南_Model/View结构基础(基本原理;数据模型;试图组件;代理)

Model/View(模型/视图) 结构是 Qt 中用界面组件显示与编辑数据的一种结构&#xff0c;视图 (View)是显示和编辑数据的界面组件&#xff0c;模型 (Model) 是视图与原始数据之间的接口。Model/View 结构的典型应用是在数据库应用程序中&#xff0c;例如数据库中的一个数据表可以在…

Mac平台下如何制作pkg安装包以及rpath设置

打包工具介绍 Mac平台规范包可以使用Packages工具。下载地址 打包前准备工作 创建一个目录 macProject macProject目录中是以下目录结构 myProject.app└── Contents├── Info.plist├── MacOS├── res├── libmymath.dylib├── Frameworks└── Resources├…

利用 jenkins 关联 Job 方式完善 RobotFramework 测试 Setup 以及 Teardown 后操作

目录 1.前言 2.Jekins 关联 Job 方式 1.前言 Jenkins是一个流行的持续集成和交付工具&#xff0c;它可以帮助自动化构建、测试和部署软件。与Robot Framework结合使用&#xff0c;可以实现更高效的测试工作流程。 在Robot Framework中&#xff0c;Setup和Teardown是测试用例…

CONTAINER = ALL是ALTER USER语句的默认值

连接到root时查看有关root&#xff0c;CDB和PDB的数据 当公用用户执行查询时&#xff0c;可以限制X $表和V $&#xff0c;GV $和CDB_ *视图的视图信息。X$表和这些视图包含有关应用程序root及其关联应用程序PDB的信息&#xff0c;或者如果连接到CDB root&#xff0c;则是整个C…

Prometheus、Grafana使用

文章目录 系统性能监控相关命令lscputopfreehtopdstatglancesiftopiptrafnethogs 监控软件Prometheus安装、使用将promethues做成服务监控其他机器 exportergrafana配置、使用密码忘记重置 系统性能监控 相关命令 lscpu lscpu 是一个 Linux 命令&#xff0c;用于显示关于 CP…

如何通过三级缓存解决 Spring 循环依赖

以下内容基于 Spring6.0.4。 这个其实是一个特别高频的面试题&#xff0c;松哥也一直很想和大家仔细来聊一聊这个话题&#xff0c;网上关于这块的文章很多&#xff0c;但是我一直觉得要把这个问题讲清楚还有点难度&#xff0c;今天我来试一试&#xff0c;看能不能和小伙伴们把…