> 文章列表 > 如何获取系统下目录的文件系统类型

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

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

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

这个时候就要介绍下/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 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}

运行结果

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