structstat{dev_tst_dev;//device 文件的设备编号
ino_tst_ino;//inode 文件的i-node
mode_tst_mode;//protection 文件的类型和存取的权限
nlink_tst_nlink;//number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1.
uid_tst_uid;//user ID of owner 文件所有者的用户识别码
gid_tst_gid;//group ID of owner 文件所有者的组识别码
dev_tst_rdev;//device type 若此文件为装置设备文件, 则为其设备编号
off_tst_size;//total size, in bytes 文件大小, 以字节计算
unsignedlongst_blksize;//blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.
unsignedlongst_blocks;//number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节.
time_tst_atime;//time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、 utime、read、write 与tructate 时改变.
time_tst_mtime;//time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、 utime 和write 时才会改变
time_tst_ctime;//time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、 权限被更改时更新
};
#include<sys/stat.h>#include<unistd.h>#include<stdio.h>#include<time.h>#include<stdlib.h>voidprintln(char*text){printf("%s\n",text);}voidprint_file_type(mode_tmode){if(S_ISREG(mode)){printf("文件类型: 普通文件\n");}elseif(S_ISDIR(mode)){printf("文件类型: 目录\n");}elseif(S_ISCHR(mode)){printf("文件类型: 字符设备\n");}elseif(S_ISBLK(mode)){printf("文件类型: 块设备\n");}elseif(S_ISFIFO(mode)){printf("文件类型: 先进先出(FIFO)\n");}elseif(S_ISLNK(mode)){printf("文件类型: 符号链接\n");}elseif(S_ISSOCK(mode)){printf("文件类型: 套接字\n");}else{printf("文件类型: 未知\n");}}voidprint_file_permissions(mode_tmode){printf("权限: ");printf((mode&S_IRUSR)?"r":"-");printf((mode&S_IWUSR)?"w":"-");printf((mode&S_IXUSR)?"x":"-");printf((mode&S_IRGRP)?"r":"-");printf((mode&S_IWGRP)?"w":"-");printf((mode&S_IXGRP)?"x":"-");printf((mode&S_IROTH)?"r":"-");printf((mode&S_IWOTH)?"w":"-");printf((mode&S_IXOTH)?"x":"-");printf("\n");}intmain(intargc,char*argv[]){if(argc<2){println("请输入要获取相关信息的文件路径:");exit(-1);}/**
* int stat(const char *__restrict__ __file, struct stat *__restrict__ __buf)
Get file attributes for FILE and put them in BUF.
*/structstatinfo;interr=stat(argv[1],&info);if(err==-1){perror("stat:");exit(-1);}printf("文件的设备编号:%ld\n",info.st_dev);printf("文件节点:%ld\n",info.st_ino);print_file_type(info.st_mode);print_file_permissions(info.st_mode);printf("连到该文件的硬连接数目:%ld\n",info.st_nlink);printf("用户ID:%d\n",info.st_uid);printf("组ID:%d\n",info.st_gid);printf("(设备类型)若此文件为设备文件,则为其设备编号:%ld\n",info.st_rdev);printf("文件字节数:%ld字节\n",info.st_size);printf("块大小:%ld\n",info.st_blksize);printf("块数:%ld\n",info.st_blocks);char*time_string=ctime(&info.st_atim.tv_sec);printf("最后一次访问时间:%s",time_string);time_string=ctime(&info.st_mtim.tv_sec);printf("最后一次修改时间:%s",time_string);time_string=ctime(&info.st_ctime);printf("最后一次改变时间(属性改变):%s",time_string);}