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

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

Жанры

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

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

О маленьких рыбаках и больших рыбах. Наш аквариум

Цеханович Юрий Владиславович
Детские:
детская проза
5.00
рейтинг книги
О маленьких рыбаках и больших рыбах. Наш аквариум

Игра

Анкай Виктория
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Игра

Демонтаж народа

Кара-Мурза Сергей Георгиевич
Научно-образовательная:
политика
5.00
рейтинг книги
Демонтаж народа

Эффект Фостера

Аллен Селина
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Эффект Фостера

Рассвет русского царства

Грехов Тимофей
1. Новая Русь
Документальная литература:
историческая литература
5.00
рейтинг книги
Рассвет русского царства

Пир стервятников

Мартин Джордж Р.Р.
Фантастика:
фэнтези
5.00
рейтинг книги
Пир стервятников

1993. Расстрел «Белого дома»

Островский Александр Владимирович
Научно-образовательная:
история
6.25
рейтинг книги
1993. Расстрел «Белого дома»

Перстень Левеншельдов (сборник)

Лагерлёф Сельма
Проза:
классическая проза
5.00
рейтинг книги
Перстень Левеншельдов (сборник)

Собрание сочинений. т.3.

Золя Эмиль
Проза:
классическая проза
5.00
рейтинг книги
Собрание сочинений. т.3.

Володарь железного града

Серебров Яр
3. Князь Воротынский
Фантастика:
попаданцы
фантастика: прочее
5.00
рейтинг книги
Володарь железного града

Гаргантюа и Пантагрюэль

Рабле Франсуа
35. БВЛ. Серия первая
Старинная литература:
европейская старинная литература
5.00
рейтинг книги
Гаргантюа и Пантагрюэль

Неучтенный элемент. Том 6

NikL
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.25
рейтинг книги
Неучтенный элемент. Том 6

Большой марш (сборник)

Гончаров Юрий Даниилович
Проза:
современная проза
5.00
рейтинг книги
Большой марш (сборник)

Посольство

Уоллер Лесли
Детективы:
политические детективы
5.00
рейтинг книги
Посольство