Программирование в стандарте POSIX


Получение информации о файлах и файловых системах - часть 8


/* Функция возвращает односимвольное обозначение типа файла */ /* Для неизвестного типа возвращается 'u' */ static char my_filetype (const mode_t mode) { switch (mode &S_IFMT) { case S_IFDIR: return ('d'); case S_IFBLK: return ('b'); case S_IFCHR: return ('c'); case S_IFLNK: return ('l'); case S_IFIFO: return ('p'); case S_IFREG: return ('-'); case S_IFSOCK: return ('s'); default: return ('u'); } } int main (int argc, char *argv[]) { struct stat buf; int i; for (i = 1; i < argc; i++) { if (stat (argv [i], &buf)) { fprintf (stderr, "\nstat: не удалось получить информацию о файле %s\n", argv [i]); return (-1); }

printf ("\nstat-информация о файле %s:\n", argv [i]); printf ("Тип: %c\n", my_filetype (buf.st_mode)); printf ("Размер: %ld\n", buf.st_size);

if (lstat (argv [i], &buf)) { fprintf (stderr, "\nlstat: не удалось получить информацию о файле %s\n", argv [i]); return (-1); }

printf ("\nlstat-информация о файле %s:\n", argv [i]); printf ("Тип: %c\n", my_filetype (buf.st_mode)); printf ("Размер: %ld\n", buf.st_size); }

return 0; }

Листинг 4.15. Пример использования функций stat() и lstat().

Возможный результат работы этой программы с аргументами /bin/view и /bin/vi показан в пример 4.16.

stat-информация о файле /bin/view: Тип: - Размер: 386120 lstat-информация о файле /bin/view: Тип: l Размер: 2 stat-информация о файле /bin/vi: Тип: - Размер: 386120 lstat-информация о файле /bin/vi: Тип: - Размер: 386120

Листинг 4.16. Возможный результат работы программы, использующей функции stat() и lstat().

Для получения интегральной информации о файловых системах, содержащих заданные файлы, следует воспользоваться служебной программой

df [опция ...] [файл ...]

или функциями fstatvfs() или statvfs() (см. пример 4.17).

#include <sys/statvfs.h> int fstatvfs (int fildes, struct statvfs *buf); int statvfs (const char *restrict path, struct statvfs *restrict buf);

Листинг 4.17.


Начало  Назад  Вперед



Книжный магазин