Системное программирование в UNIX средствами Free Pascal


         

В предыдущей главе мы познакомились


Упражнение 4.2. В предыдущей главе мы познакомились с использованием системного вызова fstat для получения информации о файле. Структура tstat, возвращаемая вызовом fstat, содержит поле mode, режим доступа к файлу. Режим доступа к файлу образуется при помощи выполнения побитовой операции ИЛИ значения кода доступа с константами, определяющими, является ли этот файл обычным файлом, каталогом, специальным файлом, или механизмом межпроцессного взаимодействия, таким как именованный канал. Наилучший способ проверить, является ли файл каталогом – использовать макрос S_ISDIR:

(* Переменная buf получена в результате вызова fstat *)

if S_ISDIR(buf.mode) then

  writeln('Это каталог')

else

  writeln('Это не каталог');

Измените процедуру my_double_ls так, чтобы она вызывала fstat для каждого найденного файла и выводила звездочку после каждого имени каталога.

В дополнение к упражнению приведем пример, демонстрирующий остальные S_-функции:

Uses linux;

Var Info : Stat;

begin

  if LStat (paramstr(1),info) then

    begin

    if S_ISLNK(info.mode) then

      Writeln ('File is a link');

    if S_ISREG(info.mode) then

      Writeln ('File is a regular file');

    if S_ISDIR(info.mode) then

      Writeln ('File is a directory');

    if S_ISCHR(info.mode) then

      Writeln ('File is a character device file');

    if S_ISBLK(info.mode) then

      Writeln ('File is a block device file');

    if S_ISFIFO(info.mode) then

      Writeln ('File is a named pipe (FIFO)');

    if S_ISSOCK(info.mode) then

      Writeln ('File is a socket');

    end;

end.


Содержание  Назад  Вперед