Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах

Роббинс Арнольд

Шрифт:

27 switch (c) {

28 case 'f':

29 file = optarg;

30 break;

31 default:

32 fprintf(stderr, "usage: %s [-f fstab-file]\n", argv[0]);

33 exit(1);

34 }

35 }

36

37 process(file);

38 return (errors != 0);

39 }

40

41 /* process --- чтение структур struct mntent из файла */

42

43 void process(const char *filename)

44 {

45 FILE* fp;

46 struct mntent *fs;

47

48 fp = setmntent(filename, "r"); /* только для чтения */

49 if (fp == NULL) {

50 fprintf(stderr, "%s: %s: could not open: %s\n",

51 myname, filename, strerror(errno));

52 exit(1);

53 }

54

55 while ((fs = getmntent(fp)) != NULL)

56 do_statvfs(fs);

57

58 endmntent(fp);

59 }

Строки 1–59 в сущности те же самые, как и для

ch08-mounted.c
.
main
обрабатывает командную стоку, a
process
просматривает в цикле каждую смонтированную файловую систему.
do_statvfs
осуществляет действительную работу, выводя для каждой интересующей файловой системы
struct statvfs
.

61 /* do_statvfs --- Использовать statvfs и вывести сведения */

62

63 void do_statvfs(const struct mntent *fs)

64 {

65 struct statvfs vfs;

66

67 if (fs->mnt_fsname[0] != '/') /* пропустить ненастоящие файловые системы */

68 return;

69

70 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 }

76

77 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);

87

88 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 }

98

99 printf("\tf_namemax: %#ld\n", (long)vfs.f_namemax);

100 }

Строки 67–68 пропускают файловые системы, которые не основываются на реальных дисковых устройствах. Это означает, что файловые системы типа

/proc
или
/dev/pts
игнорируются. (Правда, эта проверка эвристическая, но она работает: в
/etc/mtab
смонтированные устройства перечислены по полному пути устройства: например,
/dev/hda1
.) Строка 70 вызывает
statvfs
с соответствующей проверкой ошибок, а строки 77-99 выводят сведения.

Строки 89–96 имеют дело с флагами: отдельные биты информации, которые присутствуют или не присутствуют. Обсуждение того, как биты флагов используются в коде С, см. во врезке. Вот вывод

ch08-statvfs
:

$ ch08-statvfs /* Запуск программы */

/, mounted on /dev/hda2: /* Результаты для файловой системы ext2 */

f_bsize: 4096

f_frsize: 4096

f_blocks: 1549609

f_bfree: 316663

f_bavail: 237945

f_files: 788704

f_ffree: 555482

f_favail: 555482

f_fsid: 0

f_flag: (none)

f_namemax: 255

...

/win, mounted on /dev/hda1: /* Результаты для файл. системы vfat */

f_bsize: 4096

f_frsize: 4096

f_blocks: 2092383

Поделиться:
Популярные книги

Товарищ "Чума"

lanpirot
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Товарищ Чума

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Вернувшийся: Первые шаги. Том II

Vector
2. Вернувшийся
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Первые шаги. Том II

Печать Пожирателя 3

Соломенный Илья
3. Пожиратель
Фантастика:
городское фэнтези
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Печать Пожирателя 3

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Черный Маг Императора 7 (CИ)

Герда Александр
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)

Мальвиль

Мерль Робер
Фантастика:
социально-философская фантастика
научная фантастика
альтернативная история
8.29
рейтинг книги
Мальвиль

Эволюционер из трущоб. Том 10

Панарин Антон
10. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 10

Бастард Императора. Том 13

Орлов Андрей Юрьевич
13. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 13

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Вернувшийся: Корпорация. Том III

Vector
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8

Изгой Проклятого Клана. Том 6

Пламенев Владимир
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6

Сильнейший ученик. Том 2

Ткачев Андрей Юрьевич
2. Пробуждение крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 2