加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

2023/04/16
1152
阅读需 11 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

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

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

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**格式一致

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

#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 failedn",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 failedn");
  return -1;
    }
    
    printf("devName:%sn",partitionInfo.devName);
    printf("dirName:%sn",partitionInfo.dirName);
    printf("fsType:%sn",partitionInfo.fsType);
    printf("authority:%sn",partitionInfo.authority);
    
    return 0;
}

运行结果

root@firefly:~/mnt# ./get_fsType 
devName:devpts
dirName:/dev/pts
fsType:devpts
authority:rw

相关推荐

电子产业图谱

本公众号专注原创电子软硬件相关教程,希望这些教程能够帮助到大家!