NO.7 Linux 获取文件属性

news/发布时间2024/5/20 20:50:41
 1 /*
 2 用于获取文件的属性和元数据信息,并输出到终端。
 3 程序接受一个参数作为路径名,通过lstat函数获取指定文件的属性信息,并使用printf函数输出到终端。
 4 注释对代码进行了简要解释,帮助理解各个部分的功能。
 5 */
 6 #include <sys/types.h>
 7 #include <sys/stat.h>
 8 #include <stdint.h>
 9 #include <time.h>
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <sys/sysmacros.h>
13 
14 int main(int argc, char *argv[])
15 {
16     struct stat sb;
17 
18     // 检查参数数量
19     if (argc != 2) {
20         fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
21         exit(EXIT_FAILURE);
22     }
23 
24     // 获取文件属性
25     if (lstat(argv[1], &sb) == -1) {
26         perror("lstat");
27         exit(EXIT_FAILURE);
28     }
29 
30     // 输出所属设备ID
31     printf("ID of containing device:  [%jx,%jx]\n",
32             (uintmax_t) major(sb.st_dev),
33             (uintmax_t) minor(sb.st_dev));
34 
35     printf("File type:                ");
36 
37     // 输出文件类型
38     switch (sb.st_mode & S_IFMT) {
39     case S_IFBLK:  printf("block device\n");            break;
40     case S_IFCHR:  printf("character device\n");        break;
41     case S_IFDIR:  printf("directory\n");               break;
42     case S_IFIFO:  printf("FIFO/pipe\n");               break;
43     case S_IFLNK:  printf("symlink\n");                 break;
44     case S_IFREG:  printf("regular file\n");            break;
45     case S_IFSOCK: printf("socket\n");                  break;
46     default:       printf("unknown?\n");                break;
47     }
48 
49     printf("I-node number:            %ju\n", (uintmax_t) sb.st_ino);
50 
51     // 输出文件权限模式
52     printf("Mode:                     %jo (octal)\n",
53             (uintmax_t) sb.st_mode);
54 
55     // 输出链接数
56     printf("Link count:               %ju\n", (uintmax_t) sb.st_nlink);
57     
58     // 输出文件所有者信息
59     printf("Ownership:                UID=%ju   GID=%ju\n",
60             (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);
61 
62     // 输出首选I/O块大小
63     printf("Preferred I/O block size: %jd bytes\n",
64             (intmax_t) sb.st_blksize);
65     
66     // 输出文件大小
67     printf("File size:                %jd bytes\n",
68             (intmax_t) sb.st_size);
69     
70     // 输出分配的块数
71     printf("Blocks allocated:         %jd\n",
72             (intmax_t) sb.st_blocks);
73 
74     // 输出最后状态更改时间
75     printf("Last status change:       %s", ctime(&sb.st_ctime));
76     
77     // 输出最后访问文件的时间
78     printf("Last file access:         %s", ctime(&sb.st_atime));
79     
80     // 输出最后修改文件的时间
81     printf("Last file modification:   %s", ctime(&sb.st_mtime));
82 
83     exit(EXIT_SUCCESS);
84 }

 

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

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

相关文章

zabbix6.4+grafana10.1监控可视化

一、安装grafanayum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.1.4-1.x86_64.rpm 二、启动并设为开机自启[root@zabbix-server ~]# systemctl start grafana-server.service [root@zabbix-server ~]# systemctl enable grafana-server.s…

LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode …

WebKist Inside: CSS 样式表的组成

WebKist Inside: CSS 样式表的组成StyleSheet 一张 StyleSheet 由一系列 Rules 组成,这些 Rules 可以分成 2 大类: Style Rule 和 At-Rule。下面的例子展示了 Style Rule 和 At-Rule:// Style Rule div {background-color: red;font-size: 12px; }// At-Rule @media print {bo…

每日一图——2023/9/30

每日一图——哈 都忘了博客了本文来自博客园,作者:{Mr Q},转载请注明原文链接:https://www.cnblogs.com/Layout-QJS/p/17738444.html

Vue双向数据绑定原理-中

defineProperty方法 defineProperty除了可以动态修改/新增对象的属性以外, 还可以在修改/新增的时候给该属性添加get/set方法, 从而实现数据劫持。 defineProperty get/set方法特点 只要通过defineProperty给某个属性添加了get/set方法,那么以后只要获取这个属性的值就会自动调…

电影推荐

《混凝土乌托邦》 --韩国