Программирование в стандарте POSIX


Изменение атрибутов файлов и текущей позиции в файловой иерархии - часть 2


Наконец, выполняется переход по результирующему маршруту.

В случае успешной смены текущего каталога соответственно изменяются значения переменных окружения $OLDPWD (текущий каталог непосредственно перед выполнением команды cd) и $PWD (текущий каталог после выполнения команды cd).

Рассмотрим пример выполнения команды cd с разными опциями (см. пример 4.23).

Возможный результат показан в пример 4.24.

ls -dl /usr/tmp /var/tmp cd /usr/tmp pwd pwd -P cd .. pwd cd - cd -P .. pwd

Пример 4.23. Пример выполнения команды cd с разными опциями

lrwxrwxrwx 1 root root 10 Jul 6 14:16 /usr/tmp -> ../var/tmp drwxrwxrwt 5 root root 4096 Sep 4 18:05 /var/tmp /usr/tmp /var/tmp /usr /usr/tmp /var

Пример 4.24. результат выполнения команд cd с разными опциями

Можно видеть, что /usr/tmp является символьной ссылкой на каталог   /var/tmp. При варьировании опций команды pwd   каталог   /usr/tmp по-разному отображается в качестве текущего (напомним, опция -P команды pwd вызывает раскрытие символьных ссылок). По-разному срабатывает и команда cd с целевым каталогом "точка-точка", опцией -P и без таковой. В результате видно различие между физическим и логическим надкаталогами символьной ссылки.

Для изменения атрибутов файлов служат утилиты

chown [-R] [-H | -L | -P ] владелец[:группа] файл ...

(смена владельца и, быть может, владеющей группы файла) и

chmod [-R] изменение_режима файл ...

(модификация режима файла), а также аналогичные им по назначению и именам функции (см. пример 4.25).

#include <unistd.h> int chown (const char *path, uid_t owner, gid_t group); #include <unistd.h> int fchown (int fildes, uid_t owner, gid_t group); #include <sys/stat.h> int chmod (const char *path, mode_t mode); #include <sys/stat.h> int fchmod (int fildes, mode_t mode);

Листинг 4.25. Описание функций chown(), fchown(), chmod() и fchmod().

При обращении к утилите chown   владелец и группа задаются именами или числовыми идентификаторами. Реализации должны сначала произвести поиск заданных аргументов как имен в базах данных пользователей и, если нужно, групп и извлечь оттуда соответствующие числовые идентификаторы; если поиск окажется неудачным, аргументы рассматриваются как идентификаторы.




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