前言:unix下一切东西都是文件,一共有7种不同的文件,前一篇博客已经讲解的很清楚了,不懂的可以看看这里。当然,博主知道有些朋友比忙,没时间看,那我就简单点讲讲这7种文件都有哪些吧。

文件类型包括在stat结构的st_mode成员中,下面是这7种文件类型的判断方法:
        宏                                     文件类型
S_ISREG(m)                 普通文件(is it a regular file?)
S_ISDIR(m)                  目录文件(directory?)
S_ISCHR(m)                 字符特殊文件(character device?)
S_ISBLK(m)                  块特殊文件(block device?)
S_ISFIFO(m)                管道或FIFO [FIFO (named pipe)?]
S_ISLNK(m)                  符号链接 [symbolic link? (Not in POSIX.1-1996.)]
S_ISSOCK(m)               套接字 [socket? (Not in POSIX.1-1996.)]

 

 

 

 

 

 

 

 

当然这些文件都是有访问权限的,很巧这些权限也是在一个叫struct stat这个结构体中

结构体struct stat中的成员st_mode值包含了对文件的访问权限位,任何类型的文件都有访问权限(access permission)。每个文件有9个访问权限,可以它们分为3类,u表示用户(所有者)、g表示组、o表示其他

st_mode屏蔽                   含义
S_IRUSR                       用户读
S_IWUSR                      用户写
S_IXUSR                       用户执行

S_IRGRP                         组读
S_IWGRP                        组写
S_IXGRP                       组执行

S_IROTH                       其他读
S_IWOTH                      其他写
S_ICOTH                       其他执行

 

 

 

 

 

 

 

 

 

 

 

 

 

那么问题来了既然有权限,我们怎么知道这些权限呢?当然这不是难事,一个access函数就可以解决问题了

函数描述:按实际用户ID和实际组ID进行访问权限测试
(1)头文件
         #include <unistd.h>
(2)函数原型
          int access(const char *path, int amode);
(3)参数
         a、path:文件路径
         b、amode:
                 F_OK:测试文件是否存在
                 R_OK:测试文件是否可读
                 W_OK:测试文件是否可写
                 X_OK:测试文件是否可执行
(4)返回值
          成功:0
          失败:-1

 

 

 

 

 

 

 

 

 

 

 

 

这是access函数的具体用法的代码(argv[1]必须是一个已经存在的文件):

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
    if(argc != 2)
    {
        printf("argc must equal to two!\n");
        exit(1);
    }

  if(access(argv[1],F_OK)) //判断文件是否存在
    {
        printf("%s  not existence!\n",argv[1]);
        exit(1);
    }

  if(access(argv[1],R_OK)) //判断文件是否可读
    {
        printf("%s not read permission\n",argv[1]);
    }
    else
    {
        printf("%s  have read permission\n",argv[1]);
    }

  if(access(argv[1],W_OK))  //判断文件是否可写
    {
        printf("%s not write permission\n",argv[1]);
    }
    
    else
    {
        printf("%s  have write permission\n",argv[1]);
  }
  if(access(argv[1],X_OK)) //判断文件是否可执行
    {
        printf("%s not execute permission\n",argv[1]);
    }
    else
    {
        printf("%s have execute permission\n",argv[1]);
    }

    return 0;
}
View Code

相关文章:

  • 2022-12-23
  • 2023-03-06
  • 2022-02-01
  • 2022-02-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
猜你喜欢
  • 2021-09-18
  • 2021-06-27
  • 2022-02-07
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
  • 2022-01-12
相关资源
相似解决方案