Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
fsfilcnt_t f_filesОбщее число индексов («порядковых номеров файлов» на языке POSIX) в файловой системе. Это число обычно инициализируется и делается постоянным при создании файловой системы.
fsfilcnt_t f_ffreeОбщее число свободных узлов.
fsfilcnt_t f_favailЧисло индексов, которые действительно могут быть использованы. Некоторая часть индексов резервируются для суперпользователя, точно так же, как для блоков.
unsigned long int f_fsidID файловой системы. POSIX не определяет, что оно представляет, и это под Linux не используется.
unsigned long int f_flagФлаги, дающие информацию о файловой системе. POSIX определяет два флага:
ST_RDONLYST_NOSUIDТаблица 8.2. Значения GLIBC для
f_flag| Флаг | POSIX | Значение |
|---|---|---|
ST_MANDLOCK | Осуществляет принудительное блокирование (см. раздел 14.2). | |
ST_NOATIME | Не обновлять при каждом доступе время доступа | |
ST_NODEV | Запрещает доступ через файлы устройств | |
ST_NODIRATIME | Не обновлять поле времени доступе каталогов | |
ST_NOEXEC | Запрещает исполнение двоичных файлов | |
ST_NOSUID | √ | Файловая система запрещает использование битов setuid и setgid. |
ST_RDONLY | √ | Файловая система только для чтения. |
ST_SYNCHRONOUS | Любая запись осуществляется синхронно (см. раздел 4.6.3). |
unsigned long int f_namemaxМаксимальная длина имени файла. Это относится к каждому отдельному компоненту в имени пути; другими словами, максимальная длина для элемента каталога
Типы
fsblkcnt_tfsfilcnt_t<sys/types.h>unsigned longch08-statvfs.cstatvfs()1 /* ch08-statvfs.с --- демонстрация statvfs */23 /* ЗАМЕЧАНИЕ: специфично для GNU/Linux! */45 #include <stdio.h>6 #include <errno.h>7 #include <mntent.h> /* для getmntent(), et al. */8 #include <unistd.h> /* для getopt() */9 #include <sys/types.h>10 #include <sys/statvfs.h>1112 void process(const char *filename);13 void do_statvfs(const struct mntent *fs);1415 int errors = 0;16 char *myname;1718 /* main --- обработка опций */1920 int main(int argc, char **argv)21 {22 int c;23 char *file = "/etc/mtab"; /* файл для чтения по умолчанию */2425 myname = argv[0];26 while ((c = getopt(argc, argv, "f:")) != -1) {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 }3637 process(file);38 return (errors != 0);39 }4041 /* process --- чтение структур struct mntent из файла */4243 void process(const char *filename)44 {45 FILE* fp;46 struct mntent *fs;4748 fp = setmntent(filename, "r"); /* только для чтения */49 if (fp == NULL) {50 fprintf(stderr, "%s: %s: could not open: %sn",51 myname, filename, strerror(errno));52 exit(1);53 }5455 while ((fs = getmntent(fp)) != NULL)