Чтобы узнать абсолютное маршрутное имя текущего каталога, приложение может воспользоваться упоминавшейся ранее обычной встроенной командой языка shell
pwd [-L | -P]
#include <unistd.h> char *getcwd (char *buf, size_t size);
Листинг 4.1. Описание функции getcwd().
Команда pwd с (подразумеваемой) опцией -L извлекает имя текущего каталога из переменной окружения PWD, если это возможно. Посредством опции -P выполняется раскрытие символьных ссылок: в выдаваемом на стандартный вывод абсолютном маршрутном имени вместо символьных ссылок подставляется их содержимое.
Функция getcwd() помещает абсолютное маршрутное имя текущего каталога (без символьных ссылок) в массив buf длины size, который и возвращается в качестве результата (при ошибке результат равен NULL).
Приведем пример программы, использующей функцию getcwd() (см. пример 4.2).
#include <stdlib.h> #include <unistd.h> #include <stdio.h> int main (void) { size_t size; char *buf; char *apath; /* Выясним, каким должен быть размер буфера */ /* для абсолютного маршрутного имени текущего каталога */ size = (size_t) pathconf (".", _PC_PATH_MAX); if ((buf = (char *) malloc (size)) == NULL) { fprintf (stderr, "\nНе удалось выделить буфер размера %d\n", size); return 1; } if ((apath = getcwd (buf, size)) == NULL) { fprintf (stderr, "\nНе удалось определить абсолютное маршрутное имя текущего каталога\n"); return 1; } printf ("\nАбсолютное маршрутное имя текущего каталога: %s\n", apath); return 0; }
Листинг 4.2. Пример использования функции getcwd().
Обратим внимание на применение функции pathconf(), возвращающей текущее значение одного из конфигурируемых параметров целевой системы - в данном случае максимальную длину маршрутного имени. Подобный прием характерен для мобильных приложений.
Для выдачи на стандартный вывод информации о файлах всех типов служит утилита
ls [опция ...] [файл ...]
(напомним, что в квадратные скобки заключаются необязательные аргументы).