[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Установка маски создания файла - Пример

Этот пример демонстрирует, как использовать umask(2). Первый аргумент
этой программы - новая маска создания. Остальные аргументы - команда,
которая будет исполняться как подпроцесс.
12   Значение новой маски (представленное как восьмеричное число)
преобразуется в long с помощью библиотечной функции strtol(3).
13   Устанавливается новое значение маски создания. umask(2)
возвращает старое значение.
14-17     Печатается новое и старое значение маски создания моды
файла.
19-23     Создается порожденный процесс. Он наследует родительскую
маску. Подпроцесс исполняет программу, заданную в arg[2].
Программа демонстрируется следующим образом:
$ umask
0022
$ who > file1
$ setumask 027 sort -o file2 < file1
Old filemode creation mask: 0022
New filemode creation mask: 0027
$ ls -l file?
-rw-r--r--   1 imr     ustg        1258 Apr  3 14:59 file1
-rw-r-----   1 imr     ustg        1258 Apr  3 15:00 file2
$ umask
0022

Опция -o функции sort(1) указывает на файл вывода. Значение маски,
установленное с помощью umask(2), действует только во время исполнения
программы.
Файл: setumask.c
               УСТАНОВКА МАСКИ СОЗДАНИЯ ФАЙЛА - ПРИМЕР

 1 #include <sys/types.h>
 2 #include <stdio.h>
 3 #include <fcntl.h>
 4 #include <stdlib.h>
 5 #include <sys/stat.h>
 6 #include <unistd.h>
 7
 8 main(int argc, char *argv[])
 9 {
10     mode_t newmask, oldmask;
11
12     newmask = strtol(argv[1], (char **) NULL, 8);
13         oldmask = umask(newmask);
14     printf("Old filemode creation mask: %04o\n",
15                 oldmask);
16     printf("New filemode creation mask: %04o\n",
17                 newmask);
18
19     if (fork() == 0) {
20                 execvp(argv[2], &argv[2]);
21         perror(argv[2]);
22         exit(127);
23     }
24 }