[<<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 }