[<<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 */