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

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

Жанры

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

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

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Герцогиня в ссылке

Нова Юлия
2. Магия стихий
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Герцогиня в ссылке

Ну привет, заучка...

Зайцева Мария
Любовные романы:
эро литература
короткие любовные романы
8.30
рейтинг книги
Ну привет, заучка...

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

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

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

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Душелов. Том 3

Faded Emory
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
5.00
рейтинг книги
Душелов. Том 3

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Возвышение Меркурия. Книга 5

Кронос Александр
5. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 5