- •1. Основные компоненты ос Unix.
- •2. Состав и функции ядра Unix.
- •3. Структура файловой системы Unix. /5. Понятие I-узлов в файловой системе ос Unix.
- •4. Разновидности файлов ос Unix.
- •5. Понятие I-узлов в файловой системе ос Unix.
- •6. Понятие pipe (программный канал) в ос Unix, разновидности каналов.
- •7. Отображение виртуальной памяти и внешних устройств в Unix.
- •8. Идентификация пользователей в ос Unix.
- •9. Защита файлов в ос Unix.
- •10. Драйверы устройств в ос Unix.
- •Устройство как специальный файл
- •Внешний и внутренний интерфейсы устройств
- •11. Команды Shell.
- •12. Создание и редактирование файлов в Unix.
- •13. Иерархия файлов и каталогов в ос Unix.
- •14. Виды файловых систем ос Unix.
- •15. Установка системы Linux.
- •17. Атрибуты файлов ос Unix.
- •18. Форматы хранения данных в Linux.
- •19. Права доступа на файлы, утилиты для назначения прав, индивидуальные настройки пользователя.
- •20. Среда пользователя, пользователи и группы (создание и управление).
- •21. Обновление и компиляция ядра.
- •22. Работа с процессами: запуск, остановка, состояние, взаимодействие процессов,
- •23. Средства обработки текста в Linux. Другие стандартные приложения.
- •24. Принципы программирования в Linux, основные средства.
- •26. Язык Perl. Механизм выполнения программы, написанной на Perl.
- •28. Технологии распределенных вычислений. Технология corba.
- •29. Управление пакетами. Менеджер пакетов rpm.
- •30. Сервисы Linux: web-сервер Apache, ftp, firewall, proxy-сервер, электронная почта.
12. Создание и редактирование файлов в Unix.
5.1 OPEN
Вызов системной функции open (открыть файл) - это первый шаг, который должен сделать процесс, чтобы обратиться к данным в файле. Синтаксис вызова функции open:
fd = open(pathname,flags,modes);
где pathname - имя файла, flags указывает режим открытия (например, для чтения или записи), а modes содержит права доступа к файлу в случае, если файл создается. Системная функция open возвращает целое число (*), именуемое пользовательским дескриптором файла. Другие операции над файлами, такие как чтение, запись, позиционирование головок чтения-записи, воспроизведение дескриптора файла, установка параметров ввода-вывода, определение статуса файла и закрытие файла, используют значение дескриптора файла, возвращаемое системной функцией open
Предположим, что процесс, открывая файл "/etc/passwd" дважды, один раз только для чтения и один раз только для записи, и однажды файл "local" для чтения и для записи (**), выполняет следующий набор операторов:
fd1 = open("/etc/passwd",O_RDONLY);
fd2 = open("local",O_RDWR);
fd3 = open("/etc/passwd",O_WRONLY);
5.2 READ
Синтаксис вызова системной функции read (читать):
number = read(fd,buffer,count)
где fd - дескриптор файла, возвращаемый функцией open, buffer - адрес структуры данных в пользовательском процессе, где будут размещаться считанные данные в случае успешного завершения выполнения функции read, count - количество байт, которые пользователю нужно прочитать, number - количество фактически прочитанных байт.
5.3 WRIТЕ
Синтаксис вызова системной функции write (писать):
number = write(fd,buffer,count);
где переменные fd, buffer, count и number имеют тот же смысл, что и для вызова системной функции read. Алгоритм записи в обычный файл похож на алгоритм чтения из обычного файла. Однако, если в файле отсутствует блок, соответствующий смещению в байтах до места, куда должна производиться запись, ядро выделяет блок, используя алгоритм alloc, и присваивает ему номер в соответствии с точным указанием места в таблице содержимого индекса. Если смещение в байтах совпадает со смещением для блока косвенной адресации, ядру, возможно, придется выделить несколько блоков для использования их в качестве блоков косвенной адресации и информационных блоков. Индекс блокируется на все время выполнения функции write, так как ядро может изменить индекс, выделяя новые блоки; разрешение другим процессам обращаться к файлу может разрушить индекс, если несколько процессов выделяют блоки одновременно, используя одни и те же значения смещений. Когда запись завершается, ядро корректирует размер файла в индексе, если файл увеличился в размере.
5.5 УКАЗАНИЕ МЕСТА В ФАЙЛЕ, ГДЕ БУДЕТ ВЫПОЛНЯТЬСЯ ВВОД-ВЫВОД - LSEEК
Обычное использование системных функций read и write обеспечивает последовательный доступ к файлу, однако процессы могут использовать вызов системной функции lseek для указания места в файле, где будет производиться ввод-вывод, и осуществления произвольного доступа к файлу. Синтаксис вызова системной функции:
position = lseek(fd,offset,reference);
где fd - дескриптор файла, идентифицирующий файл, offset - смещение в байтах, а reference указывает, является ли значение offset смещением от начала файла, смещением от текущей позиции ввода-вывода или смещением от конца файла. Возвращаемое значение, position, является смещением в байтах до места, где будет начинаться следующая операция чтения или записи.
5.6 CLOSЕ
Процесс закрывает открытый файл, когда процессу больше не нужно обращаться к нему. Синтаксис вызова системной функции close (закрыть):
close(fd);
где fd - дескриптор открытого файла
5.7 СОЗДАНИЕ ФАЙЛА
Системная функция open дает процессу доступ к существующему файлу, а системная функция creat создает в системе новый файл. Синтаксис вызова системной функции creat:
fd = creat(pathname,modes);
где переменные pathname, modes и fd имеют тот же смысл, что и в системной функции open. Если прежде такого файла не существовало, ядро создает новый файл с указанным именем и указанными правами доступа к нему; если же такой файл уже существовал, ядро усекает файл (освобождает все существующие блоки данных и устанавливает размер файла равным 0) при наличии соответствующих прав доступа к нему