Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
Некоторые системы System V разрешают пользователям передавать свои файлы. (При смене владельца соответствующие биты файлов
setuidsetgid.tar.cpiotarcpiochown()В разделе 6.3 «Имена пользователя и группы» мы увидим, как соотносить имена пользователя и группы с соответствующими числовыми значениями
5.5.2. Изменение прав доступа:
chmod()fchmod()Изменение прав доступа осуществляется с помощью одного из двух системных вызовов,
chmod()fchmod()#include <sys/types.h> /* POSIX */#include <sys/stat.h>int chmod(const char *path, mode_t mode);int fchmod(int fildes, mode_t mode);chmod()fchmod()lchmod()rootЗначение mode создается таким же образом, как для
open()creat()Система не допустит установки бита setgid (
S_ISGIDrootroot5.5.3. Изменение временных отметок:
utime()Структура
struct stattime_tst_atime st_mtime st_ctime Значение
time_tЗначения
time_ttime_tСистемный вызов
utime()#include <sys/types.h> /* POSIX */#include <utime.h>int utime(const char *filename, struct utimbuf *buf);Структура
utimbufstruct utimbuf { time_t actime; /* время доступа */ time_t modtime; /* время изменения */};При успешном вызове возвращается 0, в противном случае возвращается -1. Если
bufNULLЧтобы изменить только одну временную отметку, используйте оригинальное значение из
struct stat/* Для краткости проверка ошибок опущена */struct stat sbuf;struct utimbuf ut;time_t now;time(&now); /* Получить текущее время дня, см. след. главу */stat("/some/file", &sbuf); /* Заполнить sbuf */ut.actime = sbuf.st_atime; /* Время доступа без изменений */ut.modtime = now - (24 * 60 * 60); /* Установить modtime на 24 часа позже */utime("/some/file", &ut); /* Установить значения */Вы можете спросить себя: «Почему может понадобиться кому-нибудь изменять времена доступа и изменения файла?» Хороший вопрос.
Чтобы на него ответить, рассмотрите случай программы, создающей дублирующие архивы, такой, как
tarcpioОднако, этот файл, возможно, не читался человеком в течение 10 лет. Некто, набрав '
ls -luutime()Аналогичным образом, рассмотрите случай архивирующей программы, восстанавливающей файл из архива. В архиве хранятся первоначальные значения времени доступа и изменения. Однако, когда файл извлечен из архива во вновь созданную копию на диске, новый файл имеет текущие дату и время для значений времени доступа и изменения.
Однако полезнее, когда вновь созданный файл выглядит, как если бы он имел тот же возраст, что и оригинальный файл в архиве. Поэтому архиватор должен иметь возможность устанавливать значения времени доступа и изменения в соответствии со значениями в архиве.