CHDIR(2)

ИМЯ
chdir, fchdir - изменить рабочий каталог

ОБЗОР
#include <unistd.h>

int chdir(const char *path);
int fchdir(int fd);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

fchdir():
    _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
    || /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

ОПИСАНИЕ
chdir() изменяет текущий рабочий каталог вызвавшего процесса на каталог, указанный в path.

fchdir() идентичен chdir(); разница в том, что каталог указывается в виде открытого файлового дескриптора.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ
В зависимости от файловой системы могут быть возвращены другие ошибки. Наиболее распространённые ошибки chdir():

EACCES
    В одном из каталогов префикса path не разрешён поиск (cм. также path_resolution(7)).

EFAULT
    Аргумент path указывает за пределы доступного адресного пространства.

EIO Произошла ошибка ввода-вывода.

ELOOP
    Во время определения path встретилось слишком много символьных ссылок.

ENAMETOOLONG
    path слишком длинен.

ENOENT
    Файл не существует.

ENOMEM
    Недостаточное количество памяти ядра.

ENOTDIR
    Компонент path не является каталогом.

Наиболее распространённые ошибки fchdir():

EACCES
    Запрещён поиск в каталоге, на который указывает fd.

EBADF
    fd не является правильным файловым дескриптором.

СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.4BSD, POSIX.1-2001.

ЗАМЕЧАНИЯ
При работе с относительными путями (те, которые не начинаются с '/') за начало отсчёта принимается текущий рабочий каталог. Дочерний процесс, созданный посредством fork(2), наследует текущий рабочий каталог родителя. Текущий рабочий каталог не меняется execve(2).

СМОТРИТЕ ТАКЖЕ
chroot(2), getcwd(3), path_resolution(7)