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


. Каталоги - часть 2


  (*выделяем числовые права для владельца, группы, остальных + специальные*)

  o:=r mod o10; 

  s:=r div o1000;

  u:=(r div o100) mod o10;

  g:=(r mod o100) div o10;

  res:=symrights[u]+symrights[g]+symrights[o];(*формируем символьыне права из базовых троек*)

 

  for i:=1 to 3 do   (*цикл проверки наличия чпециальных прав*)

    if s and (1 shl (i-1)) <> 0 then (*если право установлено*)

      if res[12-3*i]='x' then  (*если есть обычное право на выполнение*)

        res[12-3*i]:=spec[i]   (*заносим маленькую букву*)

      else

        res[12-3*i]:=upcase(spec[i]); (*иначе - большую*)

     

  getrights:=res; (*возвращаем результат - 9-символьное представление 12-битных прав*)

end;

 

 

var

  d:^TDir;              (*указатель на запись для работы с каталогом*)

  elem:^Dirent;  (*указатель на запись, хранящую один элекмент каталога*)

  tekkat,                         (*строка для хранения имени каталога*)

  fullpath                        (*полный путь к элементу каталога*)

          :array [0..1000] of char;

  st:stat;          (*для хранения информации о файле или каталоге*)

 

begin

  if paramcount=0 then      (*если в командной строке не указан каталог*)

    strcopy(tekkat,'.')     (*то в качестве каталога используем текущий*)

  else

    tekkat:=paramstr(1); (*иначе используем каталог из командной строки*)

 

  if not access(pchar(tekkat),F_OK or R_OK) then  (*F_OK - проверка сущестования объекта ф.с.*)

  begin

    writeln('Каталог ', tekkat, ' не существует или недоступен для чтения');  (*диагностика*)

    halt(1);                     (*возврат в предыдущую программу*)

  end;

 

  if not fstat(pchar(tekkat),st) then    (*попытка получения информации о файле или каталоге*)

  begin

    writeln('Ошибка получения информации о каталоге ', tekkat);  (*диагностика*)

    halt(1);                     (*возврат в предыдущую программу*)

  end;

 

  if not S_ISDIR(st.mode) then    (*проверка на каталог*)




- Начало -  - Назад -  - Вперед -



Книжный магазин