Целочисленный аргумент _type может принимать
function func (name:pchar; var status:tstat; _type:integer):integer;
begin
(* Тело функции *)
end;
Целочисленный аргумент _type может принимать одно из нескольких возможных значений, описывающих тип встретившегося объекта. Вот эти значения:
FTW_F
|
Объект является файлом
|
FTW_D
|
Объект является каталогом
|
FTW_DNR
|
Объект является каталогом, который нельзя прочесть
|
FTW_SL
|
Объект является символьной ссылкой
|
FTW_NS
|
Объект не является символьной ссылкой, и для него нельзя успешно выполнить вызов fstat
|
Если объект является каталогом, который нельзя прочесть (_type = FTW_DNR), то его потомки не будут обрабатываться. Если нельзя успешно выполнить функцию fstat (_type = FTW_NS), то передаваемая для объекта структура tstat будет иметь неопределенные значения.
Работа вызова будет продолжаться до тех пор, пока не будет завершен обход дерева или не возникнет ошибка внутри функции ftw. Обход также закончится, если определенная пользователем функция возвратит ненулевое значение. Тогда функция ftw прекратит работу и вернет значение, возвращенное функций пользователя. Ошибки внутри функции ftw приведут к возврату значения -1, тогда в переменной linuxerror будет выставлен соответствующий код ошибки.
Следующий пример использует функцию ftw для обхода поддерева каталогов, выводящего имена всех встретившихся файлов (каталогов) и права доступа к ним. Каталоги и символьные ссылки при выводе будут обозначаться дополнительной звездочкой.
Сначала рассмотрим функцию list, которая будет передаваться в качестве аргумента функции ftw.
function list(name:pchar; var status:tstat; _type:integer):integer;
begin
(* Если вызов stat завершился неудачей, просто вернуться *)
if (_type = FTW_NS) then
begin
list:=0;
exit;
end;
(*
* Иначе, вывести имя объекта,
* права доступа к нему и постфикс "*",
* если объект является каталогом или символьной ссылкой.
*)
if (_type = FTW_F) then
printf ('%-30s'#9'0%3o'#$a, [name, status.mode and octal(0777)])
Содержание Назад Вперед