stat结构体如下:

struct stat:
dev_t        st_dev        /*id device containing file*/
ino_t        st_ino        /*inode number*/
mode_t        st_mdoe        /*protection*/
nlink_t        st_nlink    /*number of hard link*/
uid_t        st_uid        /*user id of owner*/
gid_t        st_gid        /*group id of owner*/
dev_t        st_rdev        /*device ID(if specical file)*/
off_t        st_size        /*total size in bytes*/
blksize_t    st_blksize    /*blocksize for filesystem I/O*/
blkcnt_t    st_blokcs    /*number of blocks allocated*/
time_t        st_atime    /*time to last access*/
time_t        st_mtime    /*time to last modification*/
time_t        st_ctime    /*time to last satus change*/

struct stat常用字段:

st_mode:文件的访问权限和文件类型。您可以使用宏(如 S_ISREG()、S_ISDIR())来检查文件类型和权限。
st_size:文件的大小(以字节为单位)。
st_uid:文件所有者的用户ID。
st_gid:文件所属组的组ID。
st_atime:最后访问时间(上次读取文件的时间)。
st_mtime:最后修改时间(上次修改文件的时间)。
st_ctime:文件状态改变时间(上次修改文件权限、所有者等的时间)。

自定义命令的显示写法(开源项目里命令使用提示类似linux那种自带提示):

if(argc != 2){printf("Usage : stat <pathname>\n");exit(-1);}

argc处的2可以为任意num,判断的是用户输入的参数是否数量对应,不对应就显示Usage提示并退出

实例

综上,可以写出类ls命令的自定义stat命令实例,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>

int main(int argc,char ** argv)
{
  struct stat buf;
  
  if(argc != 2){
  printf("Usage : stat <pathname>\n");exit(-1);
    }
  if(stat(argv[1],&buf) != 0){
  printf("stat error!\n");exit(-1);
 }
  printf("#DEV_ID       :\n",(int)buf.st_dev);
  printf("#i-node       :\n",(int)buf.st_ino);
  printf("#link         :\n",(long)buf.st_nlink);
  printf("#UID          :\n",(int)buf.st_uid);
  printf("#GID          :\n",(int)buf.st_gid);
  printf("#size         :\n",(long)buf.st_size);
  printf("#modify_time  :\n",(long)buf.st_mtime);
  printf("#change_time  :\n",(long)buf.st_ctime);
  exit(0);
    }

标签: linux, c

添加新评论