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


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


Например, S_IRUSR соответствует праву на чтение для владельца, S_IRWXG охватывает все три бита режима доступа для владеющей группы и т.п. С помощью побитных операций с текущим режимом файла и этими константами можно сформировать требуемое значение аргумента mode функции chmod() (см. пример 4.27).

#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> /* Программа добавляет права на выполнение для файлов - аргументов командной строки */ int main (int argc, char *argv[]) { struct stat buf; int i;

for (i = 1; i < argc; i++) { if (stat (argv [i], &buf)) { fprintf (stderr, "\nstat: не удалось получить информацию о файле %s\n", argv [i]); return (-1); }

if (chmod (argv [i], buf.st_mode | S_IXUSR | S_IXGRP | S_IXOTH)) { fprintf (stderr, "\nchmod: не удалось изменить режим доступа к файлу %s\n", argv [i]); return (-1); } }

return 0; }

Листинг 4.27. использования функций stat() и chmod().

За счет рационального выбора режимов доступа можно сделать невозможными большинство ошибочных операций с файлами (например, их удаление или изменение посторонними пользователями), не ограничивая свободы осмысленных действий.

В число атрибутов файла входят показатели времени последнего доступа и/или изменения (см. выше описание структуры stat). Обычно их модификация осуществляется как побочный эффект операций с файлами, но они устанавливаются и явным образом с помощью служебной программы touch:

touch [-am] [-r эталонный_файл | -t время] [-c] файл ...

Опция -a предписывает модифицировать время последнего доступа, опция -m - время последнего изменения; если не задана ни одна из них, выполняется и то, и другое.

Устанавливаемое время может быть текущим (если не заданы опции -r и -t), наследоваться у эталонного_файла или задаваться явно как аргумент опции -t. В последнем случае оно должно иметь вид

[[CC]YY]MMDDhhmm[.SS]

Пары цифр указывают, соответственно, на две старшие цифры года, две младшие цифры года, месяц в году, номер дня в месяце, час в дне, минуту в часе и секунду в минуте.




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



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