pathfind(), pathfind_r()

Искать файл по списку директорий

Прототип:

#include <libgen.h>
char * pathfind( const char *path,
const char *name,
const char *mode );
char * pathfind_r( const char *path,
const char *name,
const char *mode,
char *buff,
size_t buff_size );

Аргументы:

path
Строка, определяющая список каталогов, в которых будет осуществлен поиск. Каталоги, имена которых указаны в path, разделяются двоеточиями.
name
Имя искомого файла. Если имя начинается с косой черты, имя обрабатывается как абсолютный путь, а путь path игнорируется.
mode
Строка опций, состоящая из символов:
r
Доступный для чтения.
w
Доступный для записи
x
Доступный для исполнения.
f
Обычный файл
b
Специальный блок.
c
Специальный символ.
d
Каталог.
p
Канал (FIFO, pipe).
u
Бит идентификатора пользователя.
g
Бит идентификатора группы.
k
Sticky бит.
s
Размер ненулевой.
buff
(только для pathfind_r()) Указатель на буфер, где pathfind_r() может хранить путь к найденному файлу.
buff_size
(только для pathfind_r()) Размер буфера, на который указывает buff.

Библиотека:

libc

Описание:

Функция pathfind() ищет в каталогах, указанных в path, файл с именем name. Функция pathfind_r() является потоко-безопасной версией pathfind().

Разрешения на чтение, запись и выполнение проверяются относительно реального (не эффективного) идентификатора пользователя и идентификатора группы текущего процесса.

Если файл name со всеми характеристиками, заданными в переменной mode, найден в любом из каталогов, указанных в path, то эти функции возвращают указатель на строку, содержащую компонент переменной пути path, за которым следует косая черта (/), за которым следует имя name.

Пустой компонент пути рассматривается как текущий каталог. Если имя найдено в текущем каталоге, косая черта к нему не добавляется; возвращается только имя.

Функции pathfind_r() также следует передать буфер buff и его размер buff_size. Этот буфер используется для хранения пути к найденному файлу.

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

Найденный путь или NULL, если файл не может быть найден.

Примеры:

Найти команду ls, используя переменную среды PATH:

pathfind( getenv( "PATH" ), "ls", "rx" );

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

Unix

pathfind()

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

pathfind_r()

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

Предостережения:

Строка, на которую указывает возвращенный указатель, сохраняется в области, которая повторно используется при последующих вызывах pathfind(). Не освобождайте эту строку с помощью free().

Используйте pathfind_r() в многопоточных приложениях.

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

access(), getenv(), mknod(), stat()

sh в Справочнике по утилитам




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