- •2.1. Введение
- •2.2. Вопросы, относящиеся к команде who
- •2.2.1. Программы состоят из команд
- •2.3. Вопрос 1: Что делает команда who?
- •2.3.1. Обращение к справочнику
- •2.4. Вопрос 2: Как работает команда who?
- •2.4.1. Мы теперь знаем, как работает who
- •2.5. Вопрос 3: Могу ли я написать who?
- •2.5.1. Вопрос: Как я буду читать структуры из файла?
- •2.5.2. Ответ: Использование open, read и close
- •2.5.3. Написание программы who 1.С
- •2.5.4. Отображение записей о вхождениях в систему
- •2.5.5. Написание версии who2.С
- •2.6. Проект два: Разработка программы ср (чтение и запись)
- •2.6.1. Вопрос 1: Что делает команда ср?
- •2.6.2. Вопрос 2: Как команда ср создает файл и как пишет в него? Создание/транкатенация файла
- •2.6.3. Вопрос 3: Могу ли я написать программу ср?
- •2.6.4. Программирование в Unix кажется достаточно простым
- •2.7. Увеличение эффективности файловых операций ввода/ вывода: Буферирование
- •2.7.1. Какой размер буфера следует считать лучшим?
- •2.7.2 Почему на системные вызовы требуется тратить время?
- •2.7.3. Означает ли, что наша программа who2.С неэффективна?
- •2.7.4. Добавление буферирования к программе who2.С
- •2.8. Буферизация и ядро
- •2.8.1. Если буферизация столь хороша, то почему ее не использует ядро?
- •2.9. Чтение файла и запись в файл
- •2.9.1. Выход из системы: Что происходит?
- •2.9.2. Выход из системы: Как это происходит
- •2.9.3. Смещение текущего указателя: Iseek
- •2.9.4. Кодирование выхода из системы через терминал
- •2.10. Что делать с ошибками системных вызовов?
- •3.1. Введение
- •3.2. Вопрос 1: Что делает команда is?
- •3.2.1. Команда Is выводит список имен файлов и оповещает об атрибутах файлов
- •3.2.3. Наиболее употребимые опции
- •3.2.4. Первый ответ: Итоговые замечания
- •3.3. Краткий обзор дерева файловой системы
- •3.4. Вопрос 2: Как работает команда Is?
- •3.4.1. Что же такое каталог, в конце концов?
- •3.4.2. Работают ли системные вызовы open, read и close в отношении каталогов?
- •3.4.3. Хорошо, хорошо. Но как же мне прочитать каталог?
- •3.5. Вопрос 3: Могу ли я написать Is?
- •3.5.1. Что еще нужно делать?
- •3.6. Проект 2: Написание версии Is -I
- •3.6.1. Вопрос 1: Что делает Is-I?
- •3.6.2. Вопрос 2: Какработает Is -I?
- •3.6.3. Ответ: Системный вызов stat получает информацию о файле
- •3.6.4. Какую еще информацию можно получить с помощью системного вызова stat?
- •3.6.5. Чего мы достигли?
- •3.6.6. Преобразование числового значения поля mode в символьное значение
- •3.6.7. Преобразования числового представления идентификаторов собственника/группы в строковое представление
- •3.6.8. Объединение всего вместе: Is2.C
- •3.7. Три специальных разряда
- •3.7.1. Разряд Set-User-id
- •3.7.2Разряд Set-Group-id
- •3.7.3 Разряд Sticky Bit
- •3.7.4. Специальные разряды nls-l
- •3.8. Итоги для команды is
- •3.9. Установка и модификация свойств файла
- •3.9.1. Тип файла
- •3.9.2. Разряды прав доступа и специальные разряды
- •3.9.3. Число ссылок на файл
- •3.9.4. Собственник и группа для файла
- •3.9.5. Размер файла
- •3.9.6. Время последней модификации и доступа
- •3.9.7. Имя файла
3.2.3. Наиболее употребимые опции
В документации команды Is приводится большой список опций этой команды. Наиболее I популярные представлены в таблице.
Команда |
Действие |
Is-а |
Показать скрытые файлы |
ls-lu |
Показать время последнего чтения |
Is-s |
Показать размер в блоках |
Is-t |
Сортировка по времени |
Is-F |
Показать типы файлов |
Ремарка относительно имен файлов с начальной точкой
Опция -а требует пояснения, если вы новичок в Unix. Unix реализует концепцию скрытых фатов на основе использования простого соглашения. Соглашение заключается в том, что команда Is не включает в список вывода имена файлов, если они начинаются с точки. Нечто в операционной системе (а именно ядро) знает и поддерживает концепцию скрытых файлов. Это соглашение, которому следуют команда Is и пользователи.
Некоторые программы используют имена с начальной точкой для файлов в пользовательском домашнем каталоге, чтобы указать неопределенные пользовательские предпочтения. Такие конфигурационные файлы легко редактировать. Но их имена в листинге о содержа нии каталога чаще всего не выводятся.
3.2.4. Первый ответ: Итоговые замечания
В результате проведения экспериментов с командой Is и после изучения соответствующей документации мы обнаружили, что команда Is выполняет две функции:
Выводит в виде списка содержимое каталогов.
Отображает информацию о файлах.
Отметим, что команда Is выполняет различную обработку каталогов и файлов. При обращении команда Is определяет, что задано в качестве аргумента - файл или каталог. Как это делается? Если мы будем писать версию программы Is, то нам потребуется ответить на три вопроса:
• Как вывести в форме списка содержимое каталога?
• Как получить и отобразить свойства файла?
• Как различить имя файла и имя каталога?
3.3. Краткий обзор дерева файловой системы
Прежде чем отвечать на сформулированные вопросы, давайте рассмотрим картину распределения файлов на диске, которая поддерживается в Unix.
Информация на диске представлена как дерево каталогов, каждый из которых содержит файлы и/или каталоги. На рисунке 3.1 небольшие прямоугольники обозначают файлы.
находящиеся в каталогах, а линиями обозначается, каким образом каталог соединяется с вышележащим и нижележащим каталогами.
Рисунок 3.1
Дерево каталогов
В Unix каждый файл расположен в некотором месте единственного дерева каталогов. Отсутствуют такие понятия, как устройства или тома. Напротив, каталоги на отдельных физических дисках и разделы рассматриваются как составные части одного дерева. Даже гибкие диски, диски CD-ROM и другие заменяемые носители будут рассматриваться в какой-то момент как подкаталоги единого дерева.
Все это значительно упрощает написание программы Is. Мы будем иметь в виду только каталоги и файлы и не думать о разделах и томах.
3.4. Вопрос 2: Как работает команда Is?
Команда Is выдает список имен файлов. Как его сформировать? Первый набросок действий будет такой:
Эта схема напоминает логику команды who. Главное отличие заключается в том, что команда who производит открытие и читает из файла, а команда Is открывает и читает данные из каталога. Насколько отлично чтение, из каталога от чтения из файла? В конечном счете, что такое каталог?
