前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何获取系统下目录的文件系统类型?

如何获取系统下目录的文件系统类型?

作者头像
嵌入式与Linux那些事
发布2023-03-24 14:08:37
1.2K0
发布2023-03-24 14:08:37
举报

福利干货,第一时间送达

最近看到一个问题,如何获取当前系统的文件类型?

这个时候就要介绍下/proc/mounts文件:这个文件以/etc/mtab文件的格式给出当前系统所安装的文件系统信息。同时也能反映出任何手工安装从而在/etc/mtab文件中没有包含的文件系统。

我们可以通过cat /proc/mounts查看挂载文件系统的状态。

代码语言:javascript
复制
root@firefly:~# cat /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=1960196k,nr_inodes=490049,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=393192k,mode=755 0 0
/dev/mmcblk1p7 /root-ro ext4 ro,relatime,data=ordered 0 0
/dev/mmcblk1p8 /userdata ext4 rw,relatime,data=ordered 0 0
overlayroot / overlay rw,relatime,lowerdir=/root-ro,upperdir=/userdata/rootfs_overlay,workdir=/userdata/rootfs_overlay-workdir/_ 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0

mounts文件包含6列

  • Device mount的设备
  • Mount Point 挂载点,也就是挂载的路径
  • File System Type 文件系统类型,如ext4、xfs等
  • Options 挂载选项,包括读写权限等参数
  • 无用内容,保持内容和**/etc/fstab**格式一致
  • 无用内容,保持内容和**/etc/fstab**格式一致

下面写个程序提取下设备名,挂载目录,文件系统类型等参数。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MOUNTS_INFO        "/proc/mounts"

typedef struct
{
    char devName[32];
    char dirName[16];
    char fsType[16];
    char authority[16];
}PartitionInfo;

int getPartitionInfo(char *pPartitionName,PartitionInfo *pPartitionInfo)
{
    FILE *fp = NULL;
    char str[128] = {0};
    char *p = NULL,*q = NULL,*pTmpStr = NULL;
    int i = 0;

    fp = fopen(MOUNTS_INFO, "r");
    if (fp < 0)
    {
        printf("open %s failed\n",MOUNTS_INFO);
        return -1;
    }

    while (NULL != fgets(str,sizeof(str),fp))
    {
        p = strstr(str,pPartitionName);
        if (NULL != p)
        {
            for(i = 0;i < 4; i++)
            {
                if (0 == i)
                {
                    q = strtok_r(str," ",&pTmpStr);
                    strcpy(pPartitionInfo->devName,q);
                }

                if (1 == i)
                {
                    q = strtok_r(p," ",&pTmpStr);
                    strcpy(pPartitionInfo->dirName,q); 
                }  

                if (2 == i)
                {
                    q = strtok_r(p," ",&pTmpStr);
                    strcpy(pPartitionInfo->fsType,q); 
                }  

                if (3 == i)
                {
                    q = strtok_r(p,",",&pTmpStr);
                    strcpy(pPartitionInfo->authority,q);
                }   
                p = pTmpStr;                         
            }        
        }
    }
    
    fclose(fp);
 return 0;
}
int main()
{
    int status = -1;
    PartitionInfo partitionInfo;
    memset(&partitionInfo,0,sizeof(PartitionInfo));
    status = getPartitionInfo("/dev/pts",&partitionInfo);
    if(status < 0)
    {
  printf("get  partition info failed\n");
  return -1;
    }
    
    printf("devName:%s\n",partitionInfo.devName);
    printf("dirName:%s\n",partitionInfo.dirName);
    printf("fsType:%s\n",partitionInfo.fsType);
    printf("authority:%s\n",partitionInfo.authority);
    
    return 0;
}

运行结果

代码语言:javascript
复制
root@firefly:~/mnt# ./get_fsType 
devName:devpts
dirName:/dev/pts
fsType:devpts
authority:rw
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式与Linux那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档