Читаем Основы программирования в Linux полностью

Вызов lseek возвращает величину параметра offset в байтах, измеряемую от начала файла, для которого установлен указатель, или -1 в случае неудачного завершения. Тип данных off_t, применяемый для параметра offset в операциях поиска, — зависящий от реализации тип integer (целое), определенный в файле sys/types.h.

fstat, stat и lstat

Системный вызов 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 элементы.

Таблица 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, включены следующие имена:

S_IFMT — тип файла;

S_IRWXU — права пользователя на чтение/запись/выполнение;

S_IRWXG — права группы на чтение/запись/выполнение;

S_IRWXO — права остальных на чтение/запись/выполнение.

Существует ряд макросов, помогающих определить типы файлов. Они просто сравнивают надлежащим образом установленные флаги режима файла с подходящим флагом, типа устройства. К ним относятся следующие:

S_ISBLK — проверка для блочного файла;

S_ISCHR — проверка для символьного файла;

S_ISDIR — проверка для каталога;

S_ISFIFO — проверка для FIFO;

S_ISREG — проверка для обычного файла;

S_ISLNK — проверка для символической ссылки.

Например, для проверки того, что файл не является каталогом и у него есть права на выполнение только для владельца и больше никаких других прав, вы можете воспользоваться следующим тестом;

struct stat statbuf;

mode_t modes;

stat("filename", &statbuf);

modes = statbuf.st_mode;

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT