找出特定目录所在的文件系统大小和名称

时间:2014-02-26 04:39:22

标签: c linux

我需要从LINUX(CentOS 5.4)上的给定子目录名称中找出filesystemmount 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命令的情况下这样做。任何建议将不胜感激。

2 个答案:

答案 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