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

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

Жанры

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).

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

Право налево

Зика Натаэль
Любовные романы:
современные любовные романы
8.38
рейтинг книги
Право налево

Третий. Том 2

INDIGO
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 2

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

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

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

Бальмануг. Невеста

Лашина Полина
5. Мир Десяти
Фантастика:
юмористическое фэнтези
5.00
рейтинг книги
Бальмануг. Невеста

Аромат невинности

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
9.23
рейтинг книги
Аромат невинности

Чемпион

Демиров Леонид
3. Мания крафта
Фантастика:
фэнтези
рпг
5.38
рейтинг книги
Чемпион

Эксперимент

Юнина Наталья
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Эксперимент

Небо для Беса

Рам Янка
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Небо для Беса

Идеальный мир для Социопата 7

Сапфир Олег
7. Социопат
Фантастика:
боевая фантастика
6.22
рейтинг книги
Идеальный мир для Социопата 7

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

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

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т