56 do_statvfs(fs);5758 endmntent(fp);59 }Строки 1–59 в сущности те же самые, как и для
ch08-mounted.cmain()process()do_statvfs()struct statvfs61 /* do_statvfs --- Использовать statvfs и вывести сведения */6263 void do_statvfs(const struct mntent *fs)64 {65 struct statvfs vfs;6667 if (fs->mnt_fsname[0] != '/') /* пропустить ненастоящие файловые системы */68 return;6970 if (statvfs(fs->mnt_dir, &vfs) != 0) {71 fprintf(stderr, "%s: %s: statvfs failed: %s\n",72 myname, fs->mnt_dir, strerror(errno));73 errors++;74 return;75 }7677 printf("%s, mounted on %s:\n", fs->mnt_dir, fs->mnt_fsname);78 printf("\tf_bsize: %ld\n", (long)vfs.f_bsize);79 printf("\tf_frsize: %ld\n", (long)vfs.f_frsize);80 printf("\tf_blocks: %lu\n", (unsigned long)vfs.f_blocks);81 printf("\tf_bfree: %lu\n", (unsigned long)vfs.f_bfree);82 printf("\tf_bavail: %lu\n", (unsigned long)vfs.f_bavail);83 printf("\tf_files: %lu\n", (unsigned long)vfs.f_files);84 printf("\tf_ffree: %lu\n", (unsigned long)vfs.f_ffree);85 printf("\tf_favail: %lu\n", (unsigned long)vfs.f_favail);86 printf("\tf_fsid: %#lx\n", (unsigned long)vfs.f_fsid);8788 printf("\tf_flag: ");89 if (vfs.f_flag == 0)90 printf("(none)\n");91 else {92 if ((vfs.f_flag & ST_RDONLY) != 0)93 printf("ST_RDONLY ");94 if ((vfs.f_flag & ST_NOSUID) != 0)95 printf("ST_NOSUID");96 printf("\n");97 }9899 printf("\tf_namemax: %#ld\n", (long)vfs.f_namemax);100 }Строки 67–68 пропускают файловые системы, которые не основываются на реальных дисковых устройствах. Это означает, что файловые системы типа
/proc/dev/pts/etc/mtab/dev/hda1statvfs()Строки 89–96 имеют дело с флагами: отдельные биты информации, которые присутствуют или не присутствуют. Обсуждение того, как биты флагов используются в коде С, см. во врезке. Вот вывод
ch08-statvfs$ <b>ch08-statvfs</b> /* Запуск программы *//, mounted on /dev/hda2: /* Результаты для файловой системы ext2 */f_bsize: 4096f_frsize: 4096f_blocks: 1549609f_bfree: 316663f_bavail: 237945f_files: 788704f_ffree: 555482f_favail: 555482f_fsid: 0f_flag: (none)f_namemax: 255.../win, mounted on /dev/hda1: /* Результаты для файл. системы vfat */f_bsize: 4096f_frsize: 4096f_blocks: 2092383f_bfree: 1391952f_bavail: 1391952f_files: 0f_ffree: 0f_favail: 0f_fsid: 0f_flag: ST_NOSUIDf_namemax: 260Во время написания этого, для GLIBC 2.3.2 и ранее, GNU
dfstatvfs()/etc/mtabstat()f_flagstat()dfdf