- •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.9.5. Размер файла
Размер файла, каталога и именованного программного канала представляется в выводе числом хранимых байтов в таких файлах. Программы могут увеличить размер файла добавлением в него данных. Программы могут обнулить размер файла с помощью системного вызова creat. Программы не могут сокращать размер файла до некоторой ненулевой длины. (Утверждение слишком категорично. Для сокращения размера можно использовать системный вызов truncate. - Примеч. ред.)
3.9.6. Время последней модификации и доступа
Каждый файл имеет три временных отметки: время последней модификации файла, время последнего чтения из файла и время последней модификации статусной информации файла (такие как идентификатор собственника или права доступа). Ядро автоматически модифицирует значения этих времен, когда программы пишут в файлы или читают из файла. Это может показаться странным, но вы можете написать программы, которые устанавливали бы произвольные значения для времени последней модификации и времени последнего доступа.
Изменение значений времен последней модификации и последнего доступа к файл|
С помощью системного вызова utime можно устанавливать время последней модификации и время последнего доступа к файлу. Для того чтобы использовать системный вызов utime, создается структура, в которой находятся два элемента time_t, один для хранения времени доступа, а другой - для времени модификации. Затем происходит вызов utime, где задается имя файла и указатель на эту структуру. Ядро устанавливает в этой структуре значения времени доступа и времени модификации для этого файла. В итоге сведем свойства вызова в таблицу:
utime
|
|
НАЗНАЧЕНИЕ
|
Изменение времени модификации и доступа к файлу
|
INCLUDE |
#inciude<sys/time.h> #inciude<utime.h> |
ИСПОЛЬЗОВАНИЕ
|
#inciude<sys/types.h> int utimefchar *path, struct utimbuf *newtimesj
|
АРГУМЕНТЫ |
path - путь к файлу newtimes - указатель на структуру utimbuf См, более детально в utime. h |
КОДЫ ВОЗВРАТА |
-1 – при ошибке 0 - при успехе |
Почему у вас может появиться желание изменить время последней модификации или последнего доступа? Использование системного вызова utime будет полезно, в частности, когда вы извлекаете файлы из копий (backups) и архивов. Рассмотрим набор файлов, который был сброшен в backup. При хранении этого набора на диске или на ленте эти
файлы будут иметь свои первоначальные значения времен модификации. Когда программа восстанавливает файлы из backup, то она гарантирует, что получит файл назад с правильным временем модификации. Программа, которая копирует файлы из места хранения backup, выполняет два действия. Во-первых, она копирует данные в новый файл. Затем она изменяет время модификации и время доступа так, чтобы они были равны значениям для оригинальных файлов, которые остались в backup на диске. Таким образом, ваши восстановленные файлы имеют то же содержимое и те же свойства, что и оригинальные файлы.
Команды Shell для изменения времени модификации и времени доступа. Обычная Unix-команда touch выполняет установку значений времени модификации и времени доступа к файлам. В документации приведены подробности об этой команде.
