Категории
Самые читаемые
PochitayKnigi » Компьютеры и Интернет » Интернет » Linux программирование в примерах - Роббинс Арнольд

Linux программирование в примерах - Роббинс Арнольд

Читать онлайн Linux программирование в примерах - Роббинс Арнольд

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 92 93 94 95 96 97 98 99 100 ... 253
Перейти на страницу:

fsfilcnt_t f_files

Общее число индексов («порядковых номеров файлов» на языке POSIX) в файловой системе. Это число обычно инициализируется и делается постоянным при создании файловой системы.

fsfilcnt_t f_ffree

Общее число свободных узлов.

fsfilcnt_t f_favail

Число индексов, которые действительно могут быть использованы. Некоторая часть индексов резервируются для суперпользователя, точно так же, как для блоков.

unsigned long int f_fsid

ID файловой системы. POSIX не определяет, что оно представляет, и это под Linux не используется.

unsigned long int f_flag

Флаги, дающие информацию о файловой системе. POSIX определяет два флага: ST_RDONLY для файловых систем только для чтения (таких, как CD-ROM) и ST_NOSUID, который запрещает использование битов setuid и setgid в исполняемых файлах. Системы GNU/Linux предусматривают дополнительные флаги: они перечислены в табл. 8.2.

Таблица 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_t и fsfilcnt_t определены в <sys/types.h>. Они обычно являются unsigned long, но на современных системах они могут быть даже 64-разрядными, поскольку диски стали очень большими. Следующая программа, ch08-statvfs.c, показывает, как использовать statvfs():

1  /* ch08-statvfs.с --- демонстрация statvfs */

2

3  /* ЗАМЕЧАНИЕ: специфично для GNU/Linux! */

4

5  #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>

11

12 void process(const char *filename);

13 void do_statvfs(const struct mntent *fs);

14

15 int errors = 0;

16 char *myname;

17

18 /* main --- обработка опций */

19

20 int main(int argc, char **argv)

21 {

22  int c;

23  char *file = "/etc/mtab"; /* файл для чтения по умолчанию */

24

25  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  }

36

37  process(file);

38  return (errors != 0);

39 }

40

41 /* process --- чтение структур struct mntent из файла */

42

43 void process(const char *filename)

44 {

45  FILE* fp;

46  struct mntent *fs;

47

48  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  }

54

55  while ((fs = getmntent(fp)) != NULL)

1 ... 92 93 94 95 96 97 98 99 100 ... 253
Перейти на страницу:
Тут вы можете бесплатно читать книгу Linux программирование в примерах - Роббинс Арнольд.
Комментарии