我需要从LINUX(CentOS 5.4)上的给定子目录名称中找出filesystem
和mount directory
名称的名称。
#include <stdio.h>
#include <sys/vfs.h>
#include <sys/mount.h>
int main(int argc, char** argv) {
struct statfs ls_tbs_fs;
statfs(argv[1], &ls_tbs_fs);
printf("TOTAL DISK KB : %lu\n", ls_tbs_fs.f_blocks*ls_tbs_fs.f_bsize/1024);
printf("USED DISK KB : %lu\n", (ls_tbs_fs.f_blocks-ls_tbs_fs.f_bavail)*ls_tbs_fs.f_bsize/1024);
// I need filesystem here
// I need mount point here
return 0;
}
我想在没有像df这样的linux命令的情况下这样做。任何建议将不胜感激。
答案 0 :(得分:1)
使用stat(2), statfs(2)和statvfs(2)。然后阅读并解析/proc/self/mounts
和/proc/self/mountstats
。
还要尝试strace df
找出它正在做的系统调用。
答案 1 :(得分:0)
这只是对原帖中问题的部分回答。
您可以通过statfs(2)
找出路径所在的文件系统类型:
struct statfs {
__SWORD_TYPE f_type; /* type of file system (see below) */
__SWORD_TYPE f_bsize; /* optimal transfer block size */
然后您可以将此文件系统类型转换为其名称。
File system types:
ADFS_SUPER_MAGIC 0xadf5
AFFS_SUPER_MAGIC 0xADFF
BEFS_SUPER_MAGIC 0x42465331
BFS_MAGIC 0x1BADFACE
CIFS_MAGIC_NUMBER 0xFF534D42
CODA_SUPER_MAGIC 0x73757245
COH_SUPER_MAGIC 0x012FF7B7
CRAMFS_MAGIC 0x28cd3d45
DEVFS_SUPER_MAGIC 0x1373
EFS_SUPER_MAGIC 0x00414A53
EXT_SUPER_MAGIC 0x137D
EXT2_OLD_SUPER_MAGIC 0xEF51
EXT2_SUPER_MAGIC 0xEF53
EXT3_SUPER_MAGIC 0xEF53
EXT4_SUPER_MAGIC 0xEF53
HFS_SUPER_MAGIC 0x4244
HPFS_SUPER_MAGIC 0xF995E849
HUGETLBFS_MAGIC 0x958458f6
ISOFS_SUPER_MAGIC 0x9660
JFFS2_SUPER_MAGIC 0x72b6
JFS_SUPER_MAGIC 0x3153464a
MINIX_SUPER_MAGIC 0x137F /* orig. minix */
MINIX_SUPER_MAGIC2 0x138F /* 30 char minix */
MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */
MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, 30 char names */
MSDOS_SUPER_MAGIC 0x4d44
NCP_SUPER_MAGIC 0x564c
NFS_SUPER_MAGIC 0x6969
NTFS_SB_MAGIC 0x5346544e
OPENPROM_SUPER_MAGIC 0x9fa1
PROC_SUPER_MAGIC 0x9fa0
QNX4_SUPER_MAGIC 0x002f
REISERFS_SUPER_MAGIC 0x52654973
ROMFS_MAGIC 0x7275
SMB_SUPER_MAGIC 0x517B
SYSV2_SUPER_MAGIC 0x012FF7B6
SYSV4_SUPER_MAGIC 0x012FF7B5
TMPFS_MAGIC 0x01021994
UDF_SUPER_MAGIC 0x15013346
UFS_MAGIC 0x00011954
USBDEVICE_SUPER_MAGIC 0x9fa2
VXFS_SUPER_MAGIC 0xa501FCF5
XENIX_SUPER_MAGIC 0x012FF7B4
XFS_SUPER_MAGIC 0x58465342
_XIAFS_SUPER_MAGIC 0x012FD16D