linux stat 函数组 stat fstat lstat 打印文件及目录相关基础信息

stat结构体定义如下:

 struct stat
 {
       dev_t     st_dev;         /* ID of device containing file */
       ino_t     st_ino;         /* Inode number */
       mode_t    st_mode;        /* File type and mode */
       nlink_t   st_nlink;       /* Number of hard links */
       uid_t     st_uid;         /* User ID of owner */
       gid_t     st_gid;         /* Group ID of owner */
       dev_t     st_rdev;        /* Device ID (if special file) */
       off_t     st_size;        /* Total size, in bytes */
       blksize_t st_blksize;     /* Block size for filesystem I/O */
       blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */
/* Since Linux 2.6, the kernel supports nanosecond
          precision for the following timestamp fields.
          For the details before Linux 2.6, see NOTES. */

       struct timespec st_atim;  /* Time of last access */
       struct timespec st_mtim;  /* Time of last modification */
       struct timespec st_ctim;  /* Time of last status change */

 	  #define st_atime st_atim.tv_sec      /* Backward compatibility */
 	  #define st_mtime st_mtim.tv_sec
   	  #define st_ctime st_ctim.tv_sec
};


三个函数测试代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
    struct  stat broken_stat;
    int fd,ret;
    if(argc<2)
    {
        printf("please input the file path!\n");
        return 0;
    }

    ret = stat(argv[1],&broken_stat);
    if(ret)
    {
         printf("please input the file path!\n");
        return 0;
    }
    else
    {
        printf("the file path is %s\n",argv[1]);
        printf("stat:he file mode is %ld\n",broken_stat.st_mode);
    }

    fd=open(argv[1],O_RDWR|O_NOCTTY|O_NDELAY);
    if(fd<0)
    {
        printf("fd %s open is failed\n",argv[1]);
    }
    ret = fstat(fd,&broken_stat);
    if (ret)
    {
        printf("please input the file path!\n");
        return 0;    
    }
    else
        printf("fstat:he file mode is %ld \n",broken_stat.st_mode);

    ret = lstat(argv[1],&broken_stat);
    if(ret)
    {
         printf("please input the file path!\n");
        return 0;
    }
    else 
        printf("lstat:the file mode is %ld \n",broken_stat.st_mode);
    return 0;

    
    

}

运行结果:

[root@wly]# ./bin/test_bin/stat  /bin/test_bin/gettime                                                                                                                                                                         
the file path is /bin/test_bin/gettime
stat:he file mode is 33261
fstat:he file mode is 33261 
lstat:the file mode is 33261 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T触发器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值