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
Поделиться:
Популярные книги
Неудержимый. Книга XXVIII
28. Неудержимый
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Здравствуй, 1985-й
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Мастера авангарда
Научно-образовательная:
история
5.00
рейтинг книги
Андер Арес
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Жертва
2. Звездный Бродяга
Фантастика:
боевая фантастика
космическая фантастика
рпг
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Феномен
2. Уникум
Фантастика:
боевая фантастика
6.50
рейтинг книги
Князь Медведев. Дилогия
Медведев
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Старый, но крепкий 7
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Сирийский рубеж
5. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Паладин. Том 3
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Чужое наследие
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужак из ниоткуда 5
5. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
фэнтези
5.00
рейтинг книги
Кодекс Охотника XXVIII
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00