我正在将文件或目录传递给我的Unix C程序,我想确定它属于哪个文件系统,以及该系统的大小。我试过使用getmntent()
中的mntent.h
和fstab.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!");
您可以模仿coreutil的stat命令(例如:stat -f -c "Blocks:%b Type:%T" $FILENAME
)的行为来获取信息。本质上,它在文件上执行statfs(2)
并解析细节。您可以将(statfsbuf->f_type)
与案例列表进行比较,并获取文件系统类型。请参阅stat.c
列表以了解其功能。