Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
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: %sn",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: %ldn", (long)vfs.f_bsize);79 printf("tf_frsize: %ldn", (long)vfs.f_frsize);80 printf("tf_blocks: %lun", (unsigned long)vfs.f_blocks);81 printf("tf_bfree: %lun", (unsigned long)vfs.f_bfree);82 printf("tf_bavail: %lun", (unsigned long)vfs.f_bavail);83 printf("tf_files: %lun", (unsigned long)vfs.f_files);84 printf("tf_ffree: %lun", (unsigned long)vfs.f_ffree);85 printf("tf_favail: %lun", (unsigned long)vfs.f_favail);86 printf("tf_fsid: %#lxn", (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: %#ldn", (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