
- •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.6. Проект 2: Написание версии Is -I
Мы уже заметили, что команда Is выполняет два вида действий: выводит список содержимого каталогов, а также отображает статусную информацию о файлах. Далее мы увидели, что эти два аспекта не связаны между собой. В каталоге содержатся не только имена файлов. Нахождение и отображение статусной информации о файлах - это отдельный сложный проект. Мы будем его реализовывать, отвечая на три стандартных вопроса.
3.6.1. Вопрос 1: Что делает Is-I?
Рассмотрим вывод команды:
total 108
- rw-rw-r- 2 bruce users 345 Jul 29 11.05 Makefile
-rw-rw-r- 1 bruce users 27521 Aug 1 12:14 chap03
drwxrwxr-x 2 bruce users 1024 Aug 1 12:15 docs
-rw-r--r-- 1 bruce users 723 Feb 9 1998 Is1 .c
-rw-r-r- 1 bruce users 3045 Feb 15 03:51 Is2.c
drwxrwxr-x 2 bruce users 1024 Aug 1 12:14 old_src
-rw-rw-r-- 1 bruce users 30720 Aug 1 12:05 s.tar
-rw-r-r- 1 bruce support 946 Feb 18 17:15stat1.c
-rw-r-r- 1 bruce support 191 Feb 9 1998 statdemo.c
-rwxrwxr-x 1 bruce users 37351 Aug 1 12:13 tail 1
-rw-r-r- 1 bruce users 1416Aug 1 12:05 taiH.c
-rw-r-r- 1 cse215cscie215574Feb9 1998 writable.c
$
В каждой строке содержатся следующие семь полей:
Режим. Первый символ в каждой строке предназначен для обозначения шипа файла, И Символ "-" показывает, что это обычный файл, а символ "d" показывает, что это каталог. Есть еще и другие типы файлов. Вы должны еще немного изучить свойства и возможности! Unix с тем, чтобы было понятно назначение других типов файлов.
Последующие девять символов в первой колонке предназначены для обозначения прав доступа. Могут быть установлены или сброшены права на чтение, запись, исполнение в отношении файла для трех категорий пользователей: собственник, группа, все остальные. В предшествующем примере вывода все файлы и каталоги были доступны для чтения в каждом из классов пользователей, но файлы были доступны на запись только собственнику файлов. Откомпилированный файл tail1 доступен на исполнение для всех категорий пользователей.
Собственник. Каждый файл принадлежит пользователю собственнику. В данной колонке указывается пользовательское имя собственника.
Группа. Каждый файл принадлежит также группе пользователей. В ряде версий команды Is в колонке указывается имя группы.
Размер. В пятой колонке находится целое число, которое обозначает число байтов в файле. Заметим, что в этой колонке каталоги в нашем примере имеют один и тот же размер.
Память под каталоги выделяется блоками, поэтому размер каталога всегда кратен 512.
(Это зависит от конкретной версии Unix. Так, в HP UX под каталог выделяются блоки размером 1024 байта.
Примеч.ред.) Для обычных файлов размер указывается в количестве нов данных, которые хранятся в этом файле.
Время последней модификации. Следующее поле состоит из трех подстрок, где размещается время последней модификации. Для сравнительно новых файлов в подстроки заносится месяц, день и время. Для более старых файлов заносится месяц, день и год. Почему такие отметки будут полезны в системе? Насколько должен быть "старым" файл, чтобы выводить в колонку год, а не время?
Имя. В этой колонке изображается имя файла.