如何在C中获取文件系统名称和大小?

问题描述 投票:1回答:1

我正在将文件或目录传递给我的Unix C程序,我想确定它属于哪个文件系统,以及该系统的大小。我试过使用getmntent()中的mntent.hfstab.h中的某些功能,但是没有运气。有什么办法可以做吗?

编辑:我没有运气的意思是,例如,当使用getmntent()时,mnt_type字段为空。我这样使用它:

struct mntent* storage = getmntent(fopen(argv[1], "r"));
if(storage) printf("File system type: %s\n", storage->mnt_type);

并且始终使用fstab.h返回NULL。

编辑2:

struct statvfs* statisticVfs = malloc(sizeof(struct statvfs));
rtrn = statvfs(argv[1], statisticVfs);
if(rtrn != -1)
{
    printf("Block size: %lu\n", statisticVfs->f_bsize);
    FILE* myFile = fopen(argv[1], "r");
    if(myFile) puts("Opened!");
    struct mntent* storage = getmntent(myFile);
    if(storage) printf("Type: %s\n", storage->mnt_type);
}
else puts("Error when using statvfs!");
c filesystems
1个回答
0
投票

您可以模仿coreutil的stat命令(例如:stat -f -c "Blocks:%b Type:%T" $FILENAME)的行为来获取信息。本质上,它在文件上执行statfs(2)并解析细节。您可以将(statfsbuf->f_type)与案例列表进行比较,并获取文件系统类型。请参阅stat.c列表以了解其功能。

© www.soinside.com 2019 - 2024. All rights reserved.