[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Состояние файла

Структура stat используется для получения информации о состоянии
файла. Поля структуры заполняются системными вызовами stat(2),
fstat(2) и lstat(2).
У структуры stat следующие поля:
 st_dev   Это поле  идентифицирует файловую  систему, которая содержит
          заданный файл. Это значение используется только как аргумент
          ustat(2),  чтобы   получить  больше  информации  о  файловой
          системе.
 st_ino   Inode-номер заданного  файла. Файл однозначно определяется с
          помощью st_dev и st_ino.
 st_mode  Это поле  содержит биты  прав доступа  к файлу,  тип файла и
          специальные биты.  Это поле  обсуждается более  подробно  на
          следующих страницах раздела. Биты доступа и специальные биты
          могут быть изменены с помощью системного вызова chmod(2).
 st_nlink Число  директорных   связей  для  заданного  файла.  Другими
          словами, это  число ссылающихся  на заданный  файл записей в
          директориях. Поле  изменяется с  помощью  системных  вызовов
          link(2) и ulink(2).
 st_uid   Пользовательский   идентификатор    владельца   файла.    Он
          изменяется с  помощью системных вызовов chown(2) и lchown(2)
          (для символических связей).
 st_gid   Идентификатор группы  заданного файла. Он также изменяется с
          помощью  системных   вызовов  chown(2)   и  lchown(2)   (для
          символических связей).
 st_rdev  Этим полем могут пользоваться только команды администратора.
          Оно  применяется  только  для  байт-  и  блок-ориетированных
          специальных файлов и является идентификатором устройства, на
          которое этот файл ссылается.
 st_size  Размер файла  в байтах. Он изменяется при записи в файл. Для
          специальных файлов этот размер всегда равен нулю.
 st_atime Время последнего  чтения файла.  Для директории это время не
          изменяется при  ее поиске  (с помощью cd), но изменяется при
          просмотре содержания  директории (с помощью ls), так как при
          этом  читается   файл  директории.   Это  время   изменяется
          следующими системными  вызовами: creat, mknod, pipe, utime и
          read.
 st_mtime Время  последней   записи  в   файл.  Это  время  изменяется
          следующими системными  вызовами: creat, mknod, pipe, utime и
          write.
 st_ctime Время изменения состояния файла. Это время не изменяется при
          чтении файла.  Это время  изменяется  следующими  системными
          вызовами: chmod,  chown, creat,  link, mknod,  pipe, unlink,
          utime и write.
                           СОСТОЯНИЕ ФАЙЛА


sys/stat.h:

struct  stat{
       .
       .
       .
       dev_t        st_dev;
       ino_t        st_ino;
       mode_t       st_mode;
       nlink_t      st_nlink;
       uid_t        st_uid;
       gid_t        st_gid;
       dev_t        st_rdev;
       off_t        st_size;
       timestruc_t st_atim;
       timestruc_t st_mtim;
       timestruc_t st_ctim;
       .
       .
       .
};

#define st_atime st_atim.tv_sec;
#define st_mtime st_mtim.tv_sec;
#define st_ctime st_ctim.tv_sec;
                      Состояние файла - st_mode

Мода файла, st_mode, разделена на три набора битов: тип файла,
специальные биты и биты прав доступа. Для интерпретации st_mode
используются символьные константы.
S_IFMT используется для выделения типа файла из моды файла. Примеры на
следующей странице показывают, как использовать структуру stat и
перечисленные символьные константы.
                      СОСТОЯНИЕ ФАЙЛА - st_mode
st_mode:


         type    special   permission



sys/stat.h:

#define S_IFMT  0xF000          /* type of file */
#define S_IFIFO 0x1000  /* fifo */
#define S_IFCHR 0x2000  /* character special */
#define S_IFDIR 0x4000  /* directory */
#define S_IFBLK 0x6000  /* block special */
#define S_IFREG 0x8000  /* regular */
#define S_IFLNK 0xA000  /* symbolic link  */
#define S_IFNAM 0x5000  /* special named file */
#define S_INSEM 0x1     /* XENIX semaphore subtype of IFNAM file */
#define S_INSHD 0x2     /* XENIX shared data subtype of IFNAM file
#define S_ISUID 04000   /* set user id on execution */
#define S_ISGID 02000   /* set group id on execution */
#define S_ISVTX 01000   /* save swapped text even after use */
#define S_IREAD 00400   /* read permission, owner */
#define S_IWRITE 00200  /* write permission, owner */
#define S_IEXEC 00100   /* execute/search permission, owner */
#define S_ENFMT S_ISGID /* record locking enforcement flag */
#define S_IRWXU 00700   /* read, write, execute: owner */
#define S_IRUSR 00400   /* read permission: owner */
#define S_IWUSR 00200   /* write permission: owner */
#define S_IXUSR 00100   /* execute permission: owner */
#define S_IRWXG 00070   /* read, write, execute: group */
#define S_IRGRP 00040   /* read permission: group */
#define S_IWGRP 00020   /* write permission: group */
#define S_IXGRP 00010   /* execute permission: group */
#define S_IRWXO 00007   /* read, write, execute: other */
#define S_IROTH 00004   /* read permission: other */
#define S_IWOTH 00002   /* write permission: other */
#define S_IXOTH 00001   /* execute permission: other */