Welcome 微信登录

首页 / 操作系统 / Linux / Linux下文件属性

当我们用ls –l filename,这个shell命令时,会打印出,文件的详细信息,如下图:这些文件的详细信息是存放在一个结构体stat里面的,当文件系统运行起来后,它从磁盘里面将文件详细信息加载到内核空间内存里,用户空间可以通过系统调用函数stat(),fstat()来取得这个结构体的信息。Stat结构体:struct stat {              dev_t     st_dev;       /* 文件系统设备号 */              ino_t     st_ino;        /* i结点号 */              mode_t   st_mode;    /* 文件类型,权限位 */              nlink_t   st_nlink;       /* 硬链接数 */              uid_t     st_uid;        /* 主人用户ID */              gid_t     st_gid;        /* 主人组ID */              dev_t     st_rdev;      /* 特殊文件设备号  */              off_t     st_size;         /* 文件字节大小 */              blksize_t  st_blksize;      /* 块大小 */              blkcnt_t  st_blocks;      /* 文件所占块个数 */              time_t    st_atime;      /* 上次访问时间 */              time_t    st_mtime;     /* 上次修改时间 */              time_t    st_ctime;       /* 上次文件状态修改时间 */};    首先,其类型被typedef过了,因此看不出其类型来,可以通过grep命令来查看(具体操作看第一节),我们对比着上图文件信息来看,基本上这一个结构体,将整个的文件的基本信息都包含了,通过读取这个结构体,就能实现一个简单的ls –l的shell命令了。 Stat函数#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *path, struct stat *buf);功能:查看文件或目录属性参数:path是文件的路径, buf就是stat结构体的指针。返回值:成功返回0,错误返回-1现在通过这个函数我们可以取得stat结构体了,那么通过读结构体就能得到ls –l 一样的效果了。我们来看一个例子:#include <stdio.h>#include <sys/stat.h>int main(int argc, char * argv[]){        if(argc != 2) {                printf("Usage: <pathname> ");        }        int i = 0;        struct stat buf;        if(stat(argv[1], &buf) < 0) {                perror("stat");        }        printf("%d %d %d %d %d %d %s ", buf.st_mode,                 buf.st_nlink, buf.st_uid, buf.st_gid,                 buf.st_size, buf.st_atime, argv[1]);        return 0;}运行结果:我们发现,除了硬链接数,文件大小,文件名一样,其它全部都不一样。看来还有很多东西要处理下,我们来分析下。首先是st_mode,它是一个int型的成员,而ls –l显示出来是字符串st_uid, st_gid这两个也是int型成员,而ls是用户名
  • 1
  • 2
  • 3
  • 4
  • 下一页
WebOS开发环境搭建Ubuntu 10.04+ 上安装 MongoDB 数据库相关资讯      Linux基础知识 
  • Linux基础知识之文件权限详解  (08月09日)
  • Linux基础知识之ls与文件名通配详  (08月01日)
  • Linux基础知识之history的详细说明  (07月31日)
  • Linux基础知识之文件管理命令(cp、  (08月09日)
  • Linux基础知识之man手册的使用  (07月31日)
  • Linux基础知识之文件的时间戳及  (07月31日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数