stat 函数的简单使用
struct stat { dev_t st_dev; //文件的设备编号 ino_t st_ino; //节点 mode_t st_mode;//文件的类型和存取的权限 nlink_t st_nlink;//连接到该文件的硬链接数目,刚建立的文件值为1 uid_t st_uid;//用户的ID gid_t st_gid;//组ID dev_t st_rdev;//(设备类型)若此文件为设备文件,则其为设备的编号 off_t st_size;//文件字节数(文件大小) blksize_t st_blksize;//块大小(文件系统的I/O缓存区大小) blkcnt_t st_blocks;//块数 time_t st_atime;//最后一次访问时间 time_t st_mtime;//最后一次修改时间 time_t st_ctime;//最后一次改变时间(指属性) };
st_mode 的定义 –16位整数
0-2--其他人权限(8进制) S_IROTH 00004 读权限 S_IWOTH 00002 写权限 S_IXOTH 00001 执行权限 S_IRWXO 00007 掩码 3-5--所属组权限 S_IRGRP 00040 读权限 S_IWGRP 00020 写权限 S_IXGRP 00010 执行权限 S_IRWXG 00070 掩码 6-8--文件所有者权限 S_IRUSR 00400 读权限 S_IWUSR 00200 写权限 S_IXUSR 00100 执行权限 S_IRWXU 00700 掩码 12-15--文件类型 S_IFSOCK 0 套接字 S_IFLNK 0 符号链接(软连接) S_IFREG 0 普通文件 S_IFBLK 0060000 块设备 S_IFDIR 0040000 目录 S_IFCHR 0020000 字符设备 S_IFIFO 0010000 管道 S_IFMT 掩码,用来过滤文件类型
statdemo.c
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char* argv[]) { struct stat st; if(argc != 2) { fprintf(stderr,"Usage: %s
\n",argv[0]); exit(EXIT_FAILURE); } if(stat(argv[1],&st) == -1) { perror("stat"); exit(EXIT_FAILURE); } printf("主设备号为:%lx,次设备号为%lx\n",(long) major(st.st_dev)),(long) minor(st.st_dev); printf("文件类型为:"); switch(st.st_mode & S_IFMT) { case S_IFBLK: printf("设备文件\n"); break; case S_IFCHR: printf("字符设备\n"); break; case S_IFDIR: printf("目录\n"); break; case S_IFIFO: printf("管道文件\n"); break; case S_IFLNK: printf("软连接文件\n"); break; case S_IFREG: printf("普通文件\n"); break; case S_IFSOCK: printf("套接字文件\n"); break; default: printf("未知文件\n"); break; } printf("节点号为 %ld\n", (long) st.st_ino); printf("文件权限为: %lo (octal)\n",(unsigned long) st.st_mode); printf("链接数为: %ld\n", (long) st.st_nlink); printf("所有者: 用户为:%s, 组为:%s\n",getpwuid(st.st_uid)->pw_name,getgrgid(st.st_gid)->gr_name); printf("I/O缓存区大小为:%ld",(long) st.st_blksize); printf("文件大小为:%lld 字节\n",(long long) st.st_size); printf("块数为:%lld字节\n",(long long) st.st_blocks); printf("最后一次文件属性改变时间: %s",ctime(&st.st_ctime)); printf("最后一次修改时间: %s",ctime(&st.st_mtime)); printf("最后一次访问时间: %s",ctime(&st.st_atime)); return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215007.html原文链接:https://javaforall.net
