[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Печать состояния файла - Пример (Продолжение)

Пример на следующей странице распечатывает моду файла. Он работает
следующим образом:
35-53     Оператор switch печатает тип файла. Обратите внимание, как в
строке 36 тип файла выделяется из моды файла. Оператор switch здесь
уместен, так как файл может быть только одного типа.
39,43     Идентификатор специального устройства определен только для
байт- и блок-ориетированных специальных файлов.
54-59     Если установлен любой из битов установки-идентификатора-
пользователя, установки-идентификатора-группы или "липкий" бит, тогда
печатается соответствующее сообщение. Обратите внимание, что
одновременно могут быть установлены несколько битов.
60   Печатаются права доступа файла. Обратите внимание, как последние
девять битов выделяются для печати.
Эта программа демонстрируется на байт- и блок-ориентированном
специальном файле следующим образом:
$ stat /dev/tty38           # character special file
file name: /dev/tty38           i-number: 1722
character special file  special device: 5926    permissions: 622
links: 1        file size: 0
user ID: 49026 name: jrs        group ID: 46014 group: ustg
last access:            Tue Dec 17 11:54:57 1989
last modification:      Tue Dec 17 11:54:57 1989
last status change:     Tue Dec 17 11:54:57 1989
$ stat /dev/dsk/2s4 # block special file
file name: /dev/dsk/2s4         i-number: 146
block special file      special device: 36      permissions: 600
links: 1        file size: 0
user ID: 0 name: root   group ID: 0 group: root
last access:            Tue Dec 17 11:16:23 1989
last modification:      Tue Oct  9 10:43:45 1989
last status change:     Tue Oct  9 10:43:45 1989

Файл: stat.c
            ПЕЧАТЬ СОСТОЯНИЯ ФАЙЛА - ПРИМЕР (ПРОДОЛЖЕНИЕ)

32
33 static void prntmode(struct stat *stbuf)
34 {
35     switch(stbuf->st_mode & S_IFMT) {
36     case S_IFDIR:
37         printf("directory\t");
38         break;
39     case S_IFCHR:
40         printf("character special file\t");
41         printf("special device: %lu\t", stbuf->st_rdev);
42         break;
43     case S_IFBLK:
44         printf("block special file\t");
45         printf("special device: %lu\t", stbuf->st_rdev);
46         break;
47     case S_IFREG:
48         printf("regular file\t");
49         break;
50     case S_IFIFO:
51         printf("named pipe\t");
52         break;
53     }
54     if (stbuf->st_mode & S_ISUID)
55         printf("setuid\t");
56     if (stbuf->st_mode & S_ISGID)
57         printf("setgid\t");
58     if (stbuf->st_mode & S_ISVTX)
59         printf("sticky\t");
60     printf("permissions: %o\n", stbuf->st_mode & 0777);
61 }
62