我正在尝试打印当前linux分区的磁盘状态。使用以下C代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/statfs.h>
struct statfs S;
int main(int argc,char *argv[]){
int i = statfs("/dev/sda3",&S);
if (i!=0){
printf("File path error!!\n");
exit(0);
}
if(S.f_type == 0xEF53){
printf("The file system is ext_fs");
}
if (S.f_type == 0x4d44)
printf("The Partition is MS DOS super magic\n");
else
printf("Some other partition\n");
printf("Optimum transfer Blocks: %ld\n",S.f_bsize);
return 0;
**问题是行if(S.f_type == 0xEF53)
无法正常工作,即使我通过/dev/sda4
分区(我的linux分区ext4),条件也会返回false。
我搜索了很多但无法解决问题。请在这里指导我......
编辑 S.f_type
的值为16914836
答案 0 :(得分:3)
statfs()
系统调用返回有关已安装文件系统的信息。 path 是已挂载文件系统中任何文件的路径名。
相反,您正在设备上使用它,因此您无法获取有关它的信息,而是关于/dev
所在的文件系统( edit :您报告的幻数对应TMPFS_MAGIC
,因此您的/dev
是tmpfs
文件系统。
您必须首先挂载/dev/sda3
(如果它尚未挂载)并在挂载点或其下面的任何文件上调用statfs
以通过此系统调用获取有关文件系统的信息。
答案 1 :(得分:1)
statfs()返回有关包含其path参数指向的文件的文件系统的信息。从statfs(2)手册:
函数statfs()返回有关已挂载文件系统的信息。 path是已挂载文件系统中任何文件的路径名。
当第一个参数是文件系统中的常规文件时,您希望查询代码按预期工作。
我还建议您使用switch语句并使用常量(如EXT4_SUPER_MAGIC)而不是硬编码值(如0xEF53)。