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

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

Жанры

Linux программирование в примерах
Шрифт:

28 #define SMB_SUPER_MAGIC 0x517B

29 #define XENIX_SUPER_MAGIC 0x012FF7B4

30 #define SYSV4_SUPER_MAGIC 0x012FF7B5

31 #define SYSV2_SUPER_MAGIC 0x012FF7B6

32 #define COH_SUPER_MAGIC 0x012FF7B7

33 #define UFS_MAGIC 0x00011954

34 #define XFS_SUPER_MAGIC 0x58465342

35 #define _XIAFS_SUPER_MAGIC 0x012FD16D

36

37 void process(const char *filename);

38 void do_statfs(const struct mntent *fs);

39

40 int errors = 0;

41 char *myname;

42

/* ...main без изменений, process почти идентична... */

85

86 /* type2str --- преобразование типа fs в строку из statfs(2) */

87

88 const char *type2str(long type)

89 {

90 static struct fsname {

91 long type;

92 const char *name;

93 } table[] = {

94 { AFFS_SUPER_MAGIC, "AFFS" },

95 { COH_SUPER_MAGIC, "COH" },

96 { EXT2_OLD_SUPER_MAGIC, "OLD EXT2" },

97 { EXT2_SUPER_MAGIС, "EXT2" },

98 { HPFS_SUPER_MAGIC, "HPFS" },

99 { ISOFS_SUPER_MAGIC, "ISOFS" },

100 { MINIX2_SUPER_MAGIC, "MINIX V2" },

101 { MINIX2_SUPER_MAGIC2, "MINIX V2 30 char" },

102 { MINIX_SUPER_MAGIC, "MINIX" },

103 { MINIX_SUPER_MAGIC2, "MINIX 30 char" },

104 { MSDOS_SUPER_MAGIC, "MSDOS" },

105 { NCP_SUPER_MAGIС, "NCP" },

106 { NFS_SUPER_MAGIC, "NFS" },

107 { PROC_SUPER_MAGIC, "PROC" },

108 { SMB_SUPER_MAGIC, "SMB" },

109 { SYSV2_SUPER_MAGIC, "SYSV2" },

110 { SYSV4_SUPER_MAGIC, "SYSV4" },

111 { UFS_MAGIC, "UFS" },

112 { XENIX_SUPER_MAGIC, "XENIX" },

113 { _XIAFS_SUPER_MAGIC, "XIAFS" },

114 { 0, NULL },

115 };

116 static char unknown[100];

117 int i;

118

119 for (i = 0; table[i].type != 0; i++)

120 if (table[i].type == type)

121 return table[i].name;

122

123 sprintf(unknown, "unknown type: %#x", type);

124 return unknown;

125 }

126

127 /* do_statfs --- Использовать statfs и вывести сведения */

128

129 void do_statfs(const struct mntent *fs)

130 {

131 struct statfs vfs;

132

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

134 return;

135

136 if (statfs(fs->mnt_dir, &vfs) != 0) {

137 fprintf(stderr, "%s: %s: statfs failed: %s\n",

138 myname, fs->mnt_dir, strerror(errno));

139 errors++;

140 return;

141 }

142

143 printf("%s, mounted on %s:\n", fs->mnt_dir, fs->mnt_fsname);

144

145 printf("\tf_type: %s\n", type2str(vfs.f_type));

146 printf("\tf_bsize: %ld\n", vfs.f_bsize);

147 printf("\tf_blocks: %ld\n", vfs.f_blocks);

148 printf("\tf_bfree: %ld\n", vfs.f_bfree);

149 printf("\tf_bavail: %ld\n", vfs.f_bavail);

150 printf("\tf_files: %ld\n", vfs.f_files);

151 printf("\tf_ffree: %ld\n", vfs.f_ffree);

152 printf("\tf_namelen: %ld\n", vfs.f_namelen);

153 }

Чтобы сохранить место, мы опустили

main
, которая не изменилась с представленной ранее другой программы, мы также опустили
process
, которая теперь вызывает
do_statfs
вместо
do_statvfs
.

Строки 13–35 содержат список магических чисел файловых систем из справочной страницы statfs(2). Хотя эти числа можно получить из заголовочных файлов исходного кода ядра, это трудно (мы пробовали), а показанному здесь способу представления следовать легче. Строки 86–125 определяют

type2str
, которая преобразует магическое число в выводимую строку. Она осуществляет простой линейный поиск в таблице пар (значение, строка). В (маловероятном) случае, когда магическое число в таблице отсутствует,
type2str
создает сообщение «неизвестный тип» и возвращает его (строки 123–124).

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

Здравствуй, Мир!

Француз Михаил
Фантастика:
рпг
попаданцы
6.25
рейтинг книги
Здравствуй, Мир!

Законы Рода. Том 8

Мельник Андрей
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Локки 10. Потомок бога

Решетов Евгений Валерьевич
10. Локки
Фантастика:
фэнтези
юмористическое фэнтези
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 10. Потомок бога

Черный Маг Императора 5

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

Последний Паладин. Том 14

Саваровский Роман
14. Путь Паладина
Фантастика:
аниме
фэнтези
попаданцы
5.75
рейтинг книги
Последний Паладин. Том 14

Наномашины, внучок! Том 2

Новиков Николай Васильевич
2. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, внучок! Том 2

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

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

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

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

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

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

Белый Волк

Мазин Александр Владимирович
2. Викинг
Приключения:
исторические приключения
9.12
рейтинг книги
Белый Волк

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

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

Цивилизация статуса (сборник)

Шекли Роберт
Сборники Роберта Шекли
Фантастика:
фэнтези
8.22
рейтинг книги
Цивилизация статуса (сборник)

Двойник короля 15

Скабер Артемий
15. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 15