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