[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Изменение владельца файла - Пример
Эта программа демонстрирует работу системного вызова chown(2).
Владелец второго файла, заданного именем в командной строке,
изменяется на владельца первого файла. Например вы можете использовать
имя личной директории вашего одногруппника в качестве первого
аргумента, если вы хотите "дать" файлу такого владельца.
Эта программа работает следующим образом:
15-18 Системный вызов stat(2) используется для получения
идентификаторов пользователя и группы первого файла, заданного именем
в командной строке.
20-24 Владелец второго файла изменяется с использованием chown(2).
Эта программа демонстрируется следующим образом:
$ >file
$ ls -l file
-rw-r--r-- 1 joel ustg 0 Dec 17 15:24 file
$ setown /etc/passwd file
$ ls -l file
-rw-r--r-- 1 root sys 0 Dec 17 15:24 file
$ setown setown.c file
file: Not owner
$ ls -l file
-rw-r--r-- 1 root sys 0 Dec 17 15:24 file
Только процессы с эффективным пользовательским идентификатором,
совпадающим с текущим владельцем данного файла, могут изменить
владельца файла. Однако, файл может быть уничтожен, независимо от прав
доступа к файлу, если у вас есть право на изменение директории этого
файла.
Файл: setown.c
ИЗМЕНЕНИЕ ВЛАДЕЛЬЦА ФАЙЛА - ПРИМЕР
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/stat.h>
5
6 main(int argc, char *argv[])
7 {
8 struct stat stbuf;
9
10 if (argc < 3) {
11 printf("Usage: %s other-file your-file\n", argv[
12 exit(1);
13 }
14
15 if (stat(argv[1], &stbuf) == -1) {
16 perror(argv[2]);
17 exit(2);
18 }
19
20 if (chown(argv[2], stbuf.st_uid,
21 stbuf.st_gid) == -1) {
22 perror(argv[2]);
23 exit(3);
24 }
25 exit(0);
26 }