Вызов lseek
offset в байтах, измеряемую от начала файла, для которого установлен указатель, или -1 в случае неудачного завершения. Тип данных off_t, применяемый для параметра offset в операциях поиска, — зависящий от реализации тип integer (целое), определенный в файле sys/types.h.Системный вызов fstat
buf, адрес которой передается как параметр.Далее приведена синтаксическая запись вызовов.
#include
#include
#include
int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
Учтите, что включение файла sys/types.h не обязательное, но мы рекомендуем включать его при использовании системных вызовов, поскольку некоторые из их определений применяют для стандартных типов псевдонимы, которые могут измениться когда-нибудь.
Родственные функции stat
lstat возвращают информацию о состоянии названного файла. Они возвращают те же результаты за исключением того, что файл является символической ссылкой. Вызов lstat возвращает данные о самой ссылке, а вызов stat — о файле, на который ссылка указывает.Элементы вызываемой структуры stat могут меняться в разных UNIX-подобных системах, но обязательно включают перечисленные в табл. 3.4 элементы.
Элемент структуры stat | Описание |
|---|---|
st_mode | Права доступа к файлу и сведения о типе файла |
st_ino | Индекс, ассоциированный с файлом |
st_dev | Устройство, на котором размещен файл |
st_uid | Идентификатор (user identity) владельца файла |
st_gid | Идентификатор группы (group identity) владельца файла |
st_atime | Время последнего обращения |
st_ctime | Время последнего изменения прав доступа, владельца, группы или объема |
st_mtime | Время последней модификации содержимого |
st_nlink | Количество жестких ссылок на файл |
У флагов st_mode
stat, также есть ряд ассоциированных макросов в заголовочном файле sys/stat.h. В эти макросы включены имена флагов для прав доступа и типов файлов и некоторые маски, помогающие проверять специфические типы и права.Флаги прав доступа такие же, как в системном вызове open
S_IFBLK
S_IFDIR
S_IFCHR
S_IFIFO
S_IFREG
S_IFLNK
Для других флагов режима файла включены следующие имена:
S_ISUID
S_ISGUID
Для масок, интерпретирующих флаги st_mode
S_IFMT — тип файла;S_IRWXU — права пользователя на чтение/запись/выполнение;S_IRWXG
S_IRWXO
Существует ряд макросов, помогающих определить типы файлов. Они просто сравнивают надлежащим образом установленные флаги режима файла с подходящим флагом, типа устройства. К ним относятся следующие:
S_ISBLK
S_ISCHR
S_ISDIR
S_ISFIFO
S_ISREG
S_ISLNK
Например, для проверки того, что файл не является каталогом и у него есть права на выполнение только для владельца и больше никаких других прав, вы можете воспользоваться следующим тестом;
struct stat statbuf;
mode_t modes;
stat("filename", &statbuf);
modes = statbuf.st_mode;