Linux 如何判断文件的类型

这篇具有很好参考价值的文章主要介绍了Linux 如何判断文件的类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Linux中,我们如何判断一个文件的类型和用户权限呢?

        在c语言中,Linux为我们提供了一个结构体stat我们可以通过 #include<sys/stat.h>引入后使用。然后通过stat中的st_mode来判断文件的类型。如下图,我们要知道文件是什么类型的话。我们只需要获取没个文件对应的stat结构题,获取方式lstat(argv[i], &st) st就是声明的结构体。argv[i]就是传入的第i+1个参数,即文件名字。

        如何获取文件类型呢,我们只需要让文件对应的stat结构体与S_IFMT相与后得到的结构和对应的文件掩码相判断就行。代码和运行时的参数和结果如下。

#include <fcntl.h>
#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 st;
  for (int i = 1; i < argc; ++i) {
    printf("%s\n", argv[i]);
    if (lstat(argv[i], &st) < 0) {
      printf("not a file\n");
      continue;
    }
    if ((S_IFMT & st.st_mode)==S_IFBLK) {
      printf("is block file\n");
    }
    if ((S_IFMT & st.st_mode)) {
      printf("is char file\n");
    }
    if ((S_IFMT & st.st_mode)==S_IFDIR) {
      printf("is dir file\n");
    }
    if ((S_IFMT & st.st_mode)==S_IFIFO) {
      printf("is fifo file\n");
    }
    if ((S_IFMT & st.st_mode)==S_IFLNK) {
      printf("is link file\n");
    }
    if ((S_IFMT & st.st_mode)==S_IFREG) {
      printf("is rge file\n");
    }
    if ((S_IFMT & st.st_mode)==S_IFSOCK) {
      printf("is socket file\n");
    }
  }
}
stat结构体中mode
S_IFMT 1111 0000 0000 0000 文件类型的位遮罩
S_IFSOCK 1100 0000 0000 0000  scoket
S_IFSOCK 1010 0000 0000 0000 符号连接
S_IFREG 1000 0000 0000 0000 一般文件
S_IFBLK 0110 0000 0000 0000 区块装置
S_IFDIR 0100 0000 0000 0000 目录
S_IFCHR 0010 0000 0000 0000 字符装置
S_IFIFO 0001 0000 0000 0000 管道
S_ISUID 0000 1000 0000 0000 文件的(set user-id on execution)位
S_ISGID 0000 0100 0000 0000 文件的(set group-id on execution)位
S_ISVTX 0000 0010 0000 0000 文件的sticky位
S_IRUSR 0000 0001 0000 0000 文件所有者具可读取权限
S_IWUv 0000 0000 1000 0000 文件所有者具可写入权限
S_IXUSR 0000 0000 0100 0000  文件所有者具可执行权限
S_IRGRP 0000 0000 0010 0000 用户组具可读取权限
S_IWGRP 0000 0000 0001 0000 用户组具可写入权限
S_IXGRP 0000 0000 0000 1000 用户组具可执行权限
S_IROTH 0000 0000 0000 0100 其他用户具可读取权限

S_IWOTH

0000 0000 0000 0010 其他用户具可写入权限
S_IXOTH 0000 0000 0000 0001

其他用户具可执行权限

Linux 如何判断文件的类型

Linux 如何判断文件的类型文章来源地址https://www.toymoban.com/news/detail-471987.html

到了这里,关于Linux 如何判断文件的类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js中如何判断一个变量的数据类型?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(41)
  • mysql数据库存数组类型数据,如何判断数组中是否包含某个值?使用mybatisplus查询。

    跟mybatisplus中.in()方法相反的函数 mybatisplus的in函数:查询的是数据库的某个属性的值是否在给定的集合中。这里我们讲的是一个值是否在数据库的某个属性数组中。 说明: 这是一张学生信息表,其中包含了学生曾经就读过的学校。现在我们要做的就是查询哪些学生就读过指

    2024年02月16日
    浏览(99)
  • vue项目中,动态src引入图片,并且js根据文件名后缀,判断文件图片、视频、文档、pdf等类型的方法

    vue根据文件地址,获取后缀,根据后缀判断类型,然后根据类型动态展示不同类型的照片 1、处理后缀,根据后缀判断类型   2、根据返回的结果,直接将文件名命名为返回的结果,比如我有个图片类型的文件,经过上述的方法,返回的是image,那我直接要显示的图片名称就为

    2024年02月06日
    浏览(57)
  • 【Linux | Shell 】- 判断文件是否存在、去掉文件后缀

    在Linux编程过程中, 设计到对文件的处理时常常需要判断某个文件是否存在,或者需要获取文件的前缀或文件后缀,这篇文章主要介绍在Linux的Shell编程或者在命令行与Shell交互时,如何判断文件是否存在、如何获取文件后缀,获取文件前缀。 将下面代码保存为 dirExist.sh ,运

    2024年02月08日
    浏览(74)
  • Linux判断文件存储移动磁盘的方法

    通过 df -h file 获取块设备文件存放位置sdb4, sudo fdisk -l 获取sdb4在/dev/sdb磁盘 lshw 获得sdb磁盘为usb类型, capabilities 属性指示为模拟设备(示例为虚拟机,真实设备为Removable)

    2024年02月14日
    浏览(44)
  • Java如何判断某文件目录是否存在

    在java中如何判断某文件所在的目录是否存在,若不存在创建目录 可以通过国使用 File 类的 getParentFile() 方法来获取文件所在的目录,并通过 exists() 方法来判断该目录是否存在,若不存在,通过 mkdirs() 方法创建目录,以下为实例 或直接简写

    2024年02月12日
    浏览(85)
  • 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第八部分:Linux、安全

    本心、输入输出、结果 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助,欢迎点赞、收藏、评论 我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节 我们使用视觉效果和简单术语来解释复杂的系统是如何

    2024年02月03日
    浏览(39)
  • jadx 支持 Windows、Linux、 macOS,能够帮我们打开.apk, .dex, .jar,.zip等格式的文件

    作者:JavaGuide 链接:https://www.zhihu.com/question/20264247/answer/2306405289 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   jadx 是一款功能强大的反编译工具,使用起来简单方便(拖拽式操作),不光提供了命令行程序,还提供了 GUI 程序。

    2024年02月07日
    浏览(43)
  • 如何判断linux 服务器是否是root权限

    您可以使用以下命令来判断当前Linux用户是否具有root权限: 如果输出为root,则表示当前用户是root用户,即具有root权限。 另外,您也可以使用以下命令来判断当前用户是否具有root权限: 如果当前用户具有sudo权限,则该命令不会输出任何内容。 如果当前用户没有sudo权限,则

    2024年02月11日
    浏览(59)
  • C++判断文件夹是否存在,不存在则创建(linux和windows)

    Windows需要如下头文件: Linux需要如下头文件: 具体实现过程如下: 如果需要删除则将mkdir替换为rkdir即可

    2024年02月12日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包