文件状态显示&命令使用提示
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);
}