Скачиваний:
77
Добавлен:
12.05.2015
Размер:
177.66 Кб
Скачать

1.5. Справочная подсистема (man)

В справочном руководстве по Linux вы найдете большую часть того, что нужно знать о системе. В первом разделе содержится описание команд (утилит), во втором – описание системных вызовов. В остальных разделах описываются функции, применяемые пользователями, программирующими на языке C, а также структура файлов и средства поддержания работоспособности системы.

Справочное руководство хранится в системе и его можно читать с терминала. Если вам требуется помощь по команде или функции языка C, можно вывести на экран соответствующую страницу руководства, набрав в командной строке

$ man <имя_команды>.

Информацию о самой команде man можно получить, набрав

$ man man.

1.6. Файлы и каталоги

Файловая система Linux представляет собой иерархическую древовидную структуру, состоящую из каталогов и файлов. Начинается она с корневого каталога (root), а имя этого каталога представлено единственным символом – “/”.

Каталог представляет собой файл, в котором содержатся каталожные записи. Логически каталог следует представлять как таблицу этих записей; в состав каждой записи входят имя файла и дополнительная информация, описывающая атрибуты файла. Атрибуты файла – это такие характеристики, как тип файла, размер файла, права доступа к файлу, время последней модификации файла. Функции stat, fstat и lstat заполняют структуру stat информацией обо всех атрибутах файла.

Следует различать логическое представление каталогов и способ, с помощью которого эта информация фактически хранится на диске. Файловые системы ОС Linux не хранят атрибуты в каталожных записях из-за сложностей, связанных с синхронизацией в случае, когда имеется несколько жестких ссылок на файл. Более подробно этот вопрос мы рассмотрим в части 2 главе 4.

Имена элементов каталога называются именами файлов. Только два символа не могут встречаться в имени файла – это наклонная черта ‘/’ (слэш) и нулевой символ ‘\0’. Символ слэша разделяет имена файлов, из которых состоит строка пути к файлу, а нулевой символ обозначает конец строки. Однако на практике для имен файлов лучше выбирать символы из подмножества обычных печатных символов. Сегодня практически все файловые ОС Linux поддерживают имена файлов длиной не менее 255 символов.

Всякий раз, когда создается новый каталог, автоматически создаются два файла: “.” и “..”. Под именем “.” подразумевается текущий каталог (то есть это ссылка на самого себя), а под именем “..” – родительский. В корневом каталоге эти два элемента ссылаются на один и тот же каталог.

Последовательность из одного или более имен файлов, разделенных слэшами, образует строку пути к файлу. Эта строка может также начинаться с символа слэша, и тогда она называется строкой абсолютного пути, в противном случае – строкой относительного пути. В случае использования относительного пути маршрут начинается от текущего каталога.

Пример. Вывести список всех файлов в каталоге достаточно просто. Ниже приводится пример упрощенной реализации команды ls(1).

Листинг 1.1. Вывод списка всех файлов в каталоге

#include <dirent.h>

#include <stdio.h>

#include <errno.h>

int main(int argc, char *argv[])

{

DIR *dp;

struct dirent *dirp;

if (argc != 2)

{

fprintf(stderr, "Использование: ls имя_каталога\n");

exit(1);

}

if (!(dp = opendir(argv[1])))

{

fprintf(stderr, "Невозможно открыть %s: %s\n", argv[1], strerror(errno));

exit(1);

}

while (dirp = readdir(dp))

printf("%s\n", dirp->d_name);

closedir(dp);

exit(0);

}

Рассмотрим эту небольшую программу внимательнее.

  • в начале программы подключаются заголовочные файлы, содержащие определения констант и прототипов функций, необходимых для работы программы;

  • функция main объявлена в соответствии со стандартом ISO C;

  • из командной строки мы принимаем аргумент argv[1], который трактуется как имя каталога, список файлов которого нужно вывести;

  • для получения необходимой информации мы использовали стандартные функции opendir, readdir и closedir;

  • функция opendir возвращает указатель на структуру DIR, который затем передается функции readdir. Затем в цикле вызывается функция readdir, которая считывает очередную запись из каталога. Функция readdir возвращает на структуру dirent или пустой указатель, если все записи уже прочитаны. Все, что нам нужно в структуре dirent, – это имя файла (поле d_name). Используя это имя, мы можем вызвать функцию stat (раздел 4.2), чтобы определить все атрибуты файла;

  • в случае возникновения ошибок мы выдаем соответствующие сообщения и завершаем работу. Об обработке ошибок мы будем говорить подробнее в разделе 1.9;

  • по завершении программы вызывается функция exit с аргументом 0. В соответствии с принятыми соглашениями значение 0 означает нормальное завершение программы, а значения в диапазоне от 1 до 255 свидетельствуют о наличии ошибки.

У каждого процесса есть свой текущий каталог, который иногда называют текущим рабочим каталогом. Это каталог, от которого отсчитываются все относительные пути, используемые в программе. Процесс может изменить свой текущий каталог с помощью функции chdir.

Когда пользователь входит в систему, текущим каталогом становится его домашний каталог. Домашний каталог пользователя определяется в соответствии с учетной записью в файле паролей (раздел 1.10).

Соседние файлы в папке Chapter.1
  • #
    12.05.2015100.86 Кб541_1.vsd
  • #
    12.05.201598.3 Кб461_2.vsd
  • #
    12.05.201589.6 Кб461_3.vsd
  • #
    12.05.201592.16 Кб471_4.vsd
  • #
    12.05.201591.14 Кб471_5.vsd
  • #
    12.05.2015177.66 Кб77Часть1.doc