GETCWD(3)

НАЗВАНИЕ
getcwd, get_current_dir_name, getwd - возвращает текущий рабочий каталог

СИНТАКСИС
#include <unistd.h>

char *getcwd(char *buf, size_t size);
char *get_current_dir_name(void);
char *getwd(char *buf);

ОПИСАНИЕ
Функция getcwd() копирует абсолютный путь к текущему рабочему каталогу в массиве, на который указывает buf, имеющий длину size.

Если текущий абсолютный путь требует буфера, длина которого превышает size, то возвращается NULL, а errno принимает значение ERANGE; приложение должно проверить, возникла эта ошибка или нет и, если необходимо, выделить буфер большего размера.

Если buf равно NULL, то поведение getcwd() становится неопределенным.

Расширение стандарта POSIX.1 для Linux (libc4, libc5, glibc) предусматривает следующее: если при вызове buf равно NULL, getcwd(), то буфер выделяется динамически с помощью функции malloc(). В этом случае выделенный буфер имеет размер size; если size равно нулю, то выделяется buf необходимого размера. Возможно (и даже рекомендуется) после использования освободить выделенные таким образом буферы с помощью free().

get_current_dir_name (которая имеет прототип только в том случае, если определено значение _GNU_SOURCE) выделит с помощью malloc(3) массив, достаточно большой для помещения в него имени текущего каталога. Если установлена и имеет правильное значение переменная окружения PWD, то будет возвращено ее значение.

getwd (имеющая прототип только в том случае, если определено значение _BSD_SOURCE или _XOPEN_SOURCE_EXTENDED) не будет выделять память с помощью malloc(3). Аргумент buf должен быть указателем на массив длиной как минимум PATH_MAX байтов. getwd возвращает только первые PATH_MAX байтов реального пути.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
NULL при ошибках (например, текущий каталог считывать невозможно) и при установленной соответствующим образом errno; при успешной работе возвращается buf. Содержимое массива buf при ошибке не определено.

НАЙДЕННЫЕ ОШИБКИ

EINVAL
    Аргумент size равен нулю, а buf не является пустым указателем.

ERANGE
    Аргумент size меньше, чем длина имени текущего каталога. Необходимо выделить массив большего размера и попробовать еще раз.

EACCES
    Нет прав на чтение или поиск одного из компонентов пути файла.

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1

СМ. ТАКЖЕ
chdir(2), free(3), malloc(3).