Шрифт:
lseek
Системный вызов
lseek
задает указатель текущей позиции чтения/записи дескриптора файла, т.е. вы можете применять его для установки в файле места, с которого будет происходить следующее считывание или на которое будет производиться следующая запись. Вы можете задать указатель на абсолютную позицию файла или позицию, относительно текущего положения указателя или конца файла.
#include <unistd.h>
#include <sys/types.h>
off_t lseek(int fildes, off_t offset, int whence);
Параметр
offset
применяется для указания позиции, а параметр whence
определяет способ применения offset
и может принимать следующие значения: SEEK_SET
— offset
задает абсолютную позицию;
SEEK_CUR
— offset
задается относительно текущей позиции;
SEEK_END
— offset
задается относительно конца файла. Вызов
lseek
возвращает величину параметра offset
в байтах, измеряемую от начала файла, для которого установлен указатель, или -1 в случае неудачного завершения. Тип данных off_t
, применяемый для параметра offset
в операциях поиска, — зависящий от реализации тип integer
(целое), определенный в файле sys/types.h. fstat, stat и lstat
Системный вызов
fstat
возвращает информацию о состоянии файла, ассоциированного с открытым дескриптором файла. Эта информация записывается в структуру buf
, адрес которой передается как параметр. Далее приведена синтаксическая запись вызовов.
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
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 элементы.
Таблица 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
— FIFO (именованный канал);
S_IFREG
— обычный файл;
S_IFLNK
— символическая ссылка. Для других флагов режима файла включены следующие имена:
S_ISUID
— элемент получает setUID при выполнении;
S_ISGUID
— элемент получает setGID при выполнении. Для масок, интерпретирующих флаги
st_mode
, включены следующие имена: