Искать файл по списку директорий
#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 );
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 системной библиотеки