Программирование в стандарте POSIX


Получение информации о файлах и файловых системах


Чтобы узнать абсолютное маршрутное имя   текущего каталога, приложение может воспользоваться упоминавшейся ранее обычной встроенной командой языка 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 [опция ...] [файл ...]

(напомним, что в квадратные скобки заключаются необязательные аргументы).


Начало  Назад  Вперед



Книжный магазин