Скачиваний:
56
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

4.6.2. Структураtstat

Структура tstat, которую уже была обсуждена в главе 3, позволяет хранить ин формацию о файле устройства в двух полях:

mode

В случае файла устройства это поле содержит права доступа к файлу, к которым прибавлено восьмеричное значение 060000 для блочных устройств или 020000 для символьных устройств. В модуле linux определены константы STAT_IFBLK и STAT_IFCHR, которые могут использоваться вместо этих чисел

rdev

Это поле содержит старший и младший номера устройства

Можно вывести эту информацию при помощи команды ls с параметром -l, например:

$ ls -l /dev/tty3

crw--w--w- 1 ben other 8,3 Sep 13 10:19 /dev/tty3

Обратите внимание на символ с в первой строке вывода, что говорит о том, что /dev/tty3 является символьным устройством. Значения 8 и 3 представляют старший и младший номера устройства соответственно.

Можно получить в программе значение поля mode при помощи методики, введенной в упражнении 4.2:

if S_ISCHR(buf.mode) then

writeln('Символьное устройство')

else

writeln('He символьное устройство');

S_ISCHR – это макрос, определенный в модуле linux.

4.6.3. Информация о файловой системе

Для устройств, которые представляют файловые системы, применимы две функции, сообщающие основную информацию о файловой системе, – полное число блоков, число свободных блоков, число свободных индексных дескрипторов и т.д. Это функции fsstat.

Описание

uses linux;

Function FSStat(Path:Pathstr; Var buf:statfs):Boolean;

Function FSStat(Fd:longint; Var buf:stat):Boolean;

Обе функции возвращают информацию о файловой системе, заданной либо именем файла устройства path, либо дескриптором открытого файла fd. Параметр buf является указателем на структуру statfs, определенную модуле linux. Структура statfs включает, по меньшей мере, следующие элементы:

bsize:longint;

Размер блока данных, при котором система имеет наибольшую производительность. Например, значение bsize может составлять при этом 8 Кбайт, что означает, что система обеспечивает более эффективный ввод/вывод при операциях с такими порциями данных

bfree:longint;

Полное число свободных блоков

bavail:longint;

Число свободных блоков, доступных непривилегированным процессам

files:longint;

Полное число номеров индексных дескрипторов

ffree:longint;

Полное число свободных номеров индексных дескрипторов

fsid:longint;

Идентификатор файловой системы

namelen:longint;

Максимальная длина файла

Следующий пример делает примерно то же самое, что и стандартная команда df. Эта программа использует функцию fsstat для вывода числа свободных блоков и свободных индексных дескрипторов в файловой системе.

(* Программа fsys - вывод информации о файловой системе *)

(* Имя файловой системы передается в качестве аргумента *)

uses linux;

var

buf:statfs;

begin

if paramcount<>1 then

begin

writeln('Применение: fsys имя_файла');

halt(1);

end;

if not fsstat(paramstr(1), buf) then

begin

writeln('Ошибка вызова fsstat');

halt(2);

end;

writeln(paramstr(1),': свободных блоков ', buf.bfree, ', свободных индексов ', buf.ffree);

halt(0);

end.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal