opendir()

Открыть директорию

Прототип:

#include <dirent.h>
DIR * opendir( const char *dirname );

Аргументы:

dirname
Путь открываемой директории. Путь может быть относительным или абсолютным.

Библиотека:

libc

Описание:

Функция opendir() используется вместе с readdir() и closedir() для получения списка имён файлов, содержащихся в директории dirname.

Есть возможность чтения более одной директории, используя функции opendir(), readdir(), rewinddir() и closedir().


Note: Использование потока директории после работы функций exec*() или spawn*() приводит к неопределённому поведению. После вызова функции fork() либо родительский, либо дочерний (но только один) процесс может продолжить обработку потока директории, используя функции readdir() и rewinddir(). Использование потока директории и родительским, и дочерним процессами приводит к неопределённому поведению. Использовать closedir() могут и родительский, и дочерний процессы.

Возвращаемое значение:

Указатель на структуру DIR, которую необходимо использовать для получения информации о файлах внутри директории dirname с помощью функции readdir().

Если возникла ошибка, функция возвращает NULL, код ошибки записывается в errno.

Коды ошибок:

EACCES
Отсутствуют права на поиск в директории dirname, либо отсутствуют права на чтение директории dirname.
ELOOP
Много уровней символических ссылок или префиксов.
ENAMETOOLONG
Длина пути dirname превышает значение PATH_MAX, либо имя директории превышает NAME_MAX.
ENOENT
Директории по указанному пути не существует.
ENOSYS
Функция opendir() не имеет реализации для файловой системы, в которой находится dirname.
ENOTDIR
dirname не является директорией.

Примеры:

Получение списка имён файлов, содержащихся в директории /home/fred:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main( void )
{
DIR *dirp;
struct dirent *direntp;
dirp = opendir( "/home/fred" );
if ( dirp == NULL )
{
perror( "can't open /home/fred" );
} else {
for ( ; ; )
{
direntp = readdir( dirp );
if ( direntp == NULL )
break;
printf( "%s\n", direntp->d_name );
}
closedir( dirp );
}
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

closedir(), struct dirent, errno, readdir(), readdir_r(), rewinddir(), seekdir(), telldir()




Предыдущий раздел: Описание API системной библиотеки