Linux系统应用编程---文件属性 stat和access

简介: Linux系统应用编程---文件属性 stat和access

stat函数

stat既有命令也有同名函数,用来获取文件Inode里主要信息,stat 跟踪符号链接,lstat不跟踪符号链接

1. #include <sys/types.h>
2. 
3. #include <sys/stat.h>
4. 
5. #include <unistd.h>
6. 
7. int stat(const char *path, struct stat *buf);
8. 
9. int fstat(int fd, struct stat *buf);
10. 
11. int lstat(const char *path, struct stat *buf);
12. 
13. struct stat {
14. 
15.     dev_t st_dev; /* ID of device containing file */
16. 
17.     ino_t st_ino; /* inode number */
18. 
19. mode_t st_mode; /* protection */
20. 
21.     nlink_t st_nlink; /* number of hard links */
22. 
23.     uid_t st_uid; /* user ID of owner */
24. 
25.     gid_t st_gid; /* group ID of owner */
26. 
27.     dev_t st_rdev; /* device ID (if special file) */
28. 
29. off_t st_size; /* total size, in bytes */
30. 
31.     blksize_t st_blksize; /* blocksize for file system I/O */
32. 
33.     blkcnt_t st_blocks; /* number of 512B blocks allocated */
34. 
35. time_t st_atime; /* time of last access */
36. 
37. time_t st_mtime; /* time of last modification */
38. 
39. time_t st_ctime; /* time of last status change */
40. 
41. };

stat里面时间辨析

          atime(最近访问时间)

          mtime(最近更改时间):指最近修改文件内容的时间

          ctime(最近改动时间):指最近改动Inode的时间

一个stat应用的小例子,打印文件的inode、文件大小、文件系统I/O块大小

1. #include <stdio.h>
2. #include <string.h>
3. #include <sys/types.h>
4. #include <sys/stat.h>
5. #include <unistd.h>
6. #include <stdlib.h>
7. 
8. #define NAME "1.txt"
9. 
10. int main(void)
11. {
12. int ret = -1;
13. struct stat buf;
14. 
15. memset(&buf, 0, sizeof(buf));//memset之后buf中全是零
16. 
17.        ret = stat(NAME, &buf);               //stat后buf中有内容了             
18. 
19. if(ret < 0)
20.        {
21. perror("stat");
22. 
23. exit(-1);
24.        }
25. 
26. //成功获取了stat结构体,从中可以得到各种属性信息
27. printf("inode = %d.\n",buf.st_ino);
28. printf("st_size = %d.\n",buf.st_size);
29. printf("st_blksize = %d.\n",buf.st_blksize);
30. 
31. return 0;
32. }

执行结果:

 

access函数

1. #include <unistd.h>
2. 
3. int access(const char *pathname, int mode);

按实际用户ID和实际组ID测试,跟踪符号链接,参数mode

R_OK 是否有读权限

W_OK 是否有写权限

X_OK 是否有执行权限

F_OK 测试一个文件是否存在

实际用户ID与有效用户ID的解释:

sudo执行时,有效用户IDroot,实际用户ID是当前用户

实际应用中,access用的最多的是F_OK参数,去判断一个文件是否存在

1. #include <stdio.h>
2. #include <unistd.h>
3. #include <string.h>
4. #include <error.h>
5. #include <errno.h>
6. #include <stdlib.h>
7. 
8. int main(void)
9. {
10. if(access("abc", F_OK) < 0){
11. perror("access");
12. exit(1);
13.          }        
14. 
15. printf("file abc is exist.\n");
16. 
17. return 0;
18. }
19.
相关文章
|
6月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
541 3
Linux系统禁用swap
|
6月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1062 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
646 3
Linux系统初始化脚本
|
6月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
665 1
|
6月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
725 1
二、Linux文本处理与文件操作核心命令
|
6月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
431 137
|
6月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1101 58
|
5月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1015 2
|
6月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
546 0
Linux内存问题排查命令详解