Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

Функция

getcwd
может также вернуть значение
NULL
, если во время выполнения программы каталог удален (
EINVAL
) или изменились его права доступа (
EACCESS
).

Просмотр каталогов

Широко распространенная проблема систем Linux — просмотр каталогов, т.е. определение файлов, размещенных в конкретном каталоге. В программах командной оболочки она решается легко — просто скомандуйте оболочке выполнить подстановку в выражении с метасимволами. В прошлом в разных вариантах UNIX был разрешен программный доступ к низкоуровневой структуре файловой системы. Вы все еще можете открывать каталог как обычный файл и непосредственно считывать элементы каталога, но разные структуры файловых систем и реализации сделали такой подход непереносимым с машины на машину. Был разработан стандартный комплект библиотечных функций, существенно упрощающий просмотр каталогов.

Функции работы с каталогами объявлены в заголовочном файле dirent.h. В них используется структура

DIR
как основа обработки каталогов. Указатель на эту структуру, называемый потоком каталога (
DIR*
), действует во многом так же, как действует поток файла (
FILE*
) при работе с обычным файлом. Элементы каталога возвращаются в структурах dirent, также объявленных в файле dirent.h, поскольку никому не следует изменять поля непосредственно в структуре
DIR
.

Мы рассмотрим следующие функции:

opendir
,
closedir
;

readdir
;

telldir
;

seekdir
;

closedir
.

opendir

Функция

opendir
открывает каталог и формирует поток каталога. Если она завершается успешно, то возвращает указатель на структуру
DIR
, которая будет использоваться для чтения элементов каталога.

#include <sys/types.h>

#include <dirent.h>

DIR *opendir(const char *name);

В случае неудачи функция opendir возвращает пустой указатель. Имейте в виду, что для доступа к самому каталогу поток каталога использует низкоуровневый дескриптор файла, поэтому opendir может дать сбой, если открыто слишком много файлов.

readdir

Функция

readdir
возвращает указатель на структуру, содержащую следующий элемент каталога в потоке каталога
dirp
. Успешные вызовы
readdir
возвращают следующие элементы каталогов. При возникновении ошибки и в конце каталога
readdir
возвращает
NULL
. Системы, удовлетворяющие стандарту POSIX, возвращая
NULL
, не меняют переменную
errno
в случае достижения конца каталога и устанавливают ее значение, если обнаружена ошибка.

#include <sys/types.h>

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

Просмотр каталога с помощью функции

readdir
не гарантирует формирование списка всех файлов (и подкаталогов) в каталоге, если в это время выполняются другие процессы, создающие и удаляющие файлы в каталоге.

В состав структуры

dirent
, содержащей реквизиты элемента каталога, входят следующие компоненты.

ino_t d_ino
— индекс файла;

char d_name[]
— имя файла.

Для выяснения других реквизитов файла в каталоге вам необходимо вызвать

stat
, который мы обсуждали ранее.

telldir

Функция

telldir
возвращает значение, регистрирующее текущую позицию в потоке каталога. Вы можете использовать ее в последующих вызовах функции
seekdir
для переустановки просмотра каталога, начиная с текущей позиции.

#include <sys/types.h>

#include <dirent.h>

long int telldir(DIR *dirp);

seekdir

Функция

seekdir
устанавливает указатель на элемент каталога в потоке каталога, заданном в параметре
dirp
. Значение параметра
loc
, применяемого для установки позиции, следует получить из предшествующего вызова функции
telldir
.

  • Читать дальше
  • 1
  • ...
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: