用stat函数获取文件信息

Linux 专栏收录该内容
25 篇文章 0 订阅

 前面我们初步认识了stat这个函数,并用它学会了查看文件的大小:linux 用stat 函数来查看文件大小

现在我们来再看看stat 结构体中的 st_mode 成员,st_mode 其实是2byte的16bit的数,下面是用八进制表示的st_mode ,总共包含了下面这些情况:

    S_IFMT   0170000    掩码
    S_IFSOCK 0140000    套接字
    S_IFLNK 0120000     符号连接(软链接)
    S_IFREG 0100000     一般文件
    S_IFBLK 0060000     块设备
    S_IFDIR 0040000     目录
    S_IFCHR 0020000     字符设备
    S_IFIFO 0010000     管道

    S_ISUID 04000     文件的(set user-id on execution)位
    S_ISGID 02000     文件的(set group-id on execution)位
    S_ISVTX 01000     文件的sticky位

    S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限
    S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限
    S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限
    上面这三个用 (S_IRWXU) 00700 的掩码;

    S_IRGRP 00040             用户组具可读取权限
    S_IWGRP 00020             用户组具可写入权限
    S_IXGRP 00010             用户组具可执行权限
    上面这三个用 (S_IRWXG) 00070 的掩码;    

    S_IROTH 00004             其他用户具可读取权限
    S_IWOTH 00002             其他用户具可写入权限
    S_IXOTH 00001             其他用户具可执行权限
    上面这三个用 (S_IRWXO) 00007 的掩码;

下面我们来举两个例子,看如何使用:

我们可以用如下的语句来判断文件类型:

if((s.st_mode & S_IFMT) == S_IFREG )//则说明这个文件 s 的文件类型是普通文件

我们可以用如下的语句来判断文件所有者是否具有可执行权限:

if(s.st_mode & S_IXUSR)//则说明这个文件 s 的所有者有可执行权限

 我们接着写一个测试用例:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<sys/types.h>
  4 #include<unistd.h>
  5 #include<sys/stat.h>
  6 #include<string.h>
  7 
  8 int main(){
  9     struct stat st;
 10     int ret = stat("test.c",&st);
 11     if(ret == -1){
 12         perror("stat error");
 13         exit(1);
 14     }
 15 
 16     printf("file size == %d\n",(int)st.st_size);
 17     //判断文件类型是不是普通文件
 18     if((st.st_mode & S_IFMT) == S_IFREG ){
 19         printf("这是一个普通文件\n");
 20     }
 21     if(st.st_mode & S_IRUSR){
 22         printf("  r\n");
 23     }
 24     if(st.st_mode & S_IWUSR){
 25         printf("  w\n");
 26     }
 27     if(st.st_mode & S_IXUSR){
 28         printf("  x\n");
 29     }
 30     return 0;
 31 }

编译运行后: 

 不多说,自行体会。

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

zpznba

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值