- •Министерство образования и науки Украины
- •Практическое занятие №1
- •1.1. Сокращенная запись двоичных чисел в восьмеричной и шестнадцатеричной системах счисления
- •1.2. Преобразование восьмеричных и шестнадцатеричных чисел в двоичные
- •1.3. Преобразование двоичных, восьмеричных и шестнадцатеричных чисел в десятичные
- •1.4. Преобразование десятичных чисел в двоичные, восьмеричные и шестнадцатеричные
- •2. Упражнения
- •3. Содержание отчёта
- •Практическое занятие №2
- •1.1. Вход в систему
- •1.2. Редактирование командной строки
- •1.3. Память командных строк
- •1.4. Переключение виртуальных консолей
- •1.5. Изменение консольных шрифтов
- •1.6. Основные команды
- •Выполнение некоторых команд
- •2. Команда просмотра содержимого каталогов -ls (LiSt) – выдает на экран перечень файлов и каталогов (по умолчанию из текущего каталога).
- •Жесткая ссылка обозначает ся так же, как файл, на который она ссылается, счетчик ссылок при этом будет иметь значение больше 1.
- •3. Команда создание новых каталогов - mkdir.
- •5. Команда копирование файлов -cp (CoPy).
- •6. Команда перемещение файлов - mv (MoVe).
- •7. Команда удаление файлов - rm (ReMove).
- •8. Команды просмотра содержимого файлов more и cat.
- •Подстановочные символы
- •1.7. Выход из системы
- •2. Упражнения
- •Используя справочную информацию из п.1.6 Основные команды, изучите работу рассмотренных команд с различными параметрами и опциями:
- •1.2. Перенаправление ввода и вывода
- •1.3. Перенаправление с добавлением
- •1.4. Использование конвейера
- •2. Упражнения
- •3. Содержание отчёта
- •Справочная информация
- •Практическое занятие №4 Псевдонимы команд в ос qnx Цель – создание псевдонимов команд для облегчения работы в среде ос qnx
- •1. Краткие теоретические сведения
- •1.1. Управление связями файлов
- •1.2. Жесткие связи
- •1.3. Символические связи
- •1.4. Права доступа к файлам
- •1.5. Зависимости
- •1.6. Изменение прав доступа
- •2. Упражнения
- •3. Содержание отчёта
- •1.2. Сравнение файлов (команда diff)
- •1.3. Подсчет числа слов, строк и байт в файле (команда wc)
- •1.4. Потоковый редактор sed
- •2. Упражнения
- •/Usr/bin/grep
- •/Usr/xpg4/bin/grep
- •/Usr/xpg4/bin/grep
- •Операнды
- •/Usr/bin/grep
- •/Usr/xpg4/bin/grep
- •Использование
- •Работа с большими файлами
- •/Usr/bin/who
- •/Usr/xpg4/bin/who
- •Операнды
- •1.1. Ввод текста
- •1.2. Редактирование текста
- •1.3. Сохранение файлов и выход из VI
- •1.4. Редактирование еще одного файла
- •1.5. Включение других файлов
- •1.6. Выполнение команд Shell
- •2. Упражнения
- •3. Содержание отчёта
- •Практическое занятие №7 Работа с текстовыми файлами Цель – знакомство с командами, работающими с текстовыми файлами (awk-интерпретатор скриптовый)
- •1. Краткие теоретические сведения
- •1.1. Язык awk
- •1.2. Регулярные выражения
- •Метасимволы, используемые в регулярных выражениях
- •1.3. Действия
- •1.4. Awk-переменные и выражения
- •1.5. Использование операций
- •1.6. Использование массивов
- •1.7. Селекторы
- •1.8. Использование операторов
- •1.9. Ввод и вывод данных
- •1.10. Встроенные функции
- •2. Упражнения
- •Структура файла query1
- •Структура файла query2
- •3. Содержание отчёта
- •1.2. Граматика языка shell
- •2. Упражнения
- •3. Содержание отчёта
- •Выполнить:
- •2. Упражнения
- •Примечание:
- •3. Содержание отчёта
- •1.1. Компоновка объектных модулей
- •1.2. Отладка
- •2. Упражнения
- •Задание №1
- •Задание №2
- •Задание №3
- •Задание №4
- •Задание №5
- •Задание №6
- •Задание №13
- •Задание №14
- •Задание №15
- •Задание №16
- •Задание №17
- •Практическое занятие №11
- •2. Упражнения
- •3. Содержание отчёта
- •1.2. Создание каталога
- •1.3. Биты режима для прав доступа
- •1.4. Удаление каталога
- •1.5. Создание жесткой связи
- •1.6. Создание символической связи
- •1.7. Чтение символической связи
- •1.8. Переименование файла
- •1.9. Удаление файла
- •1.10. Обработка ошибок
- •2. Упражнения
- •3. Содержание отчёта
- •1.2. Проверка возможностей управления работой и процессами в shell
- •2. Упражнения
- •3. Содержание отчёта
- •1.3. Ошибки, связанные с именами файлов
- •1.4. Доступ к файлу
- •2. Упражнения
- •3. Содержание отчёта
- •Практическое занятие №15 Организация процессов вQnx
- •1. Методические указания по выполнению практической работы
- •1.1. Файл main.O
- •1.2. Файл input.C
- •1.3. Файл output.C
- •1.4. Файл process.C
- •1.5. Используемые функции
- •1.6. Получение информации о процессах
- •2. Упражнения
- •1.2. Клиент
- •1.3. Определение идентификаторов узла, процесса и канала (nd/pid/chid) нужного сервера
- •1.4. Применение обмена сообщениями
- •2. Упражнения
- •3. Содержание отчёта
- •Практическое занятие №17 Организация потоков в qnx
- •1. Краткие теоретические сведения
- •1.1. Запуск потока
- •1.2. Администрирование атрибутов потока
- •Текст программы
- •Результаты
- •1.2. Текст программы
- •1.3. Последовательность действий
- •1.4. Результаты
- •2. Упражнения
- •3. Содержание отчёта
2. Упражнения
Выполнить следующие задания и подготовить отчет по результатам выполнения.
УПРАЖНЕНИЕ 2.1.
Разработать приложение, состоящее из трех взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).
Процесс Р1 создает канал и, используя функцию семейства spawn*(), запускает процессы Р2(М2) и Р3(М3), передавая им в качестве параметра chid созданного канала.
Процесс Р2 создает свой канал, устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о chid своего канала и переходит в состояние приема сообщений по созданному каналу.
Процесс Р3 устанавливает соединение с каналом процесса Р1 и посылает ему запрос на получение pid процесса Р2 и chid его канала для присоединения к каналу процесса Р2. Получив ответ (pid и chid), присоединяется к каналу процесса Р2 и посылает сообщение "Р2 загружен".
Процесс Р2, приняв сообщение от процесса Р3, добавляет к нему информацию "Р1 принял сообщение от Р2" и отправляет сформированное таким образом сообщение процессу Р1.
Процесс Р1, получив сообщение от Р2, выдает его на экран терминала, посылает ответ "Р1 ОК" процессу Р2 и завершает работу (терминируется).
Процесс Р2, получив ответ от Р1, выдает его на экран терминала, посылает ответ " Р2 ОК" процессу Р3 и завершает работу (терминируется).
Процесс Р3, получив ответ от Р2, выдает его на экран терминала после чего выдает на терминал "Р3 ОК" и завершает работу (терминируется).
УПРАЖНЕНИЕ 2.2.
Разработать приложение, состоящее из трех взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).
Процесс Р1 создает канал и, используя функцию семейства spawn*(), запускает процесс Р2(М2), передавая ему в качестве параметра chid созданного канала, и переходит в состояние приема сообщений от Р2 по своему каналу.
Процесс Р2 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р3(М3), передавая ему в качестве параметра chid созданного канала. Устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о pid процесса Р3 и переходит в состояние приема сообщений по созданному каналу от Р3.
Процесс Р3 создает свой канал, устанавливает соединение с каналом процесса Р2 и посылает ему сообщение "Р3 загружен". Получив ответ, посылает ему chid своего канала и переходит в состояние приема сообщений по своему каналу.
Процесс Р2, приняв первое сообщение, отправляет его процессу Р1, получив ответ от Р1, принимает chid от процесса Р3, посылает ему ответ и передает chid процессу Р1. Далее выдает на терминал "Р2 загружен" и переходит в состояние приема сообщений по своему каналу от Р3.
Процесс Р1, получив первое сообщение от Р2, выдает его на экран терминала, посылает ответ процессу Р2 и принимает второе сообщение, устанавливает соединение с каналом процесса Р3 и посылает по нему сообщение "stop", после ответа переходит в ожидание сообщения по своему каналу.
Процесс Р3, получив "stop", отправляет его процессу Р2, печатает "stop Р3" и терминируется.
Процесс Р2, получив "stop", отправляет его процессу Р1, печатает "stop Р2" и терминируется.
Процесс Р1, получив "stop", печатает "stop Р1" и терминируется.
УПРАЖНЕНИЕ 2.3.
Разработать приложение, состоящее из трех взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).
Процесс Р1 создает канал и, используя функцию семейства spawn*(), запускает процессы Р2(М2) и Р3(М3), передавая им в качестве параметра chid созданного канала, и переходит в ожидание сообщений по своему каналу.
Процесс Р2 создает свой канал, устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о chid своего канала и переходит в состояние приема сообщений по созданному каналу.
Процесс Р3 создает свой канал, устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о chid своего канала и переходит в состояние приема сообщений по созданному каналу
Процесс Р1, приняв сообщение от процесса Р2 или Р3 о chid канала, устанавливает соединение и посылает по нему - "Р1 принял сообщение от Р?", принимает ответ и выдает его на терминал. После такого взаимодействия с Р2 и Р3, Р1 терминируется.
Процесс Р?, получив сообщение от Р1, выдает его на экран терминала, посылает ответ "Р? ОК" процессу Р1 и завершает работу (терминируется).
УПРАЖНЕНИЕ 2.4.
Разработать приложение, состоящее из пяти взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).
Процесс Р1 используя функцию семейства spawn*(), запускает процесс Р2(М2) с флагом P_NOWAIT и Р3(М2) с флагом P_WAIT.
Процесс Р2 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р4(М3), передавая в качестве аргумента chid своего канала, и переходит в состояние приема сообщений по созданному каналу.
Процесс Р3 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р5(М3), передавая в качестве аргумента chid своего канала, и переходит в состояние приема сообщений по созданному каналу.
Процесс Р?(М3) устанавливает соединение c каналом родительского процесса Р?(М2) и посылает сообщение "Р?-ОК", получив ответ , выдает его на терминал и терминируется
Процесс Р?(М2), получив сообщение от Р?(М3), выдает его на экран терминала, посылает ответ "Р? ОК" процессу Р?(М3) и завершает работу (терминируется).
Процесс Р1, возобновив свою работу, выдает на терминал сообщение "STOP" и терминируется.
УПРАЖНЕНИЕ 2.5.
Разработать приложение, которое строится в виде цепочки процессов. Требуется написать два программных модуля: М1, М2. На базе модуля М1 из shell запускается стартовый процесс Р1(М1), которому передается в качестве параметра длина цепочки N (количество процессов).
Процесс Р1 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р2(М2), передавая в качестве аргумента длину цепочки N, chid своего канала и переходит в ожидание прихода по нему сообщения, после чего отвечает и терминируется.
Процесс Р2(М2) устанавливает соединение с каналом родительского процесса и, если N не равно 0, создает свой канал и, используя функцию семейства spawn*(), запускает следующий процесс Р?(М2), передавая ему в качестве аргумента N-1 и chid своего канала, и переходит в состояние приема сообщений по своему каналу. Если N=0, то посылает предыдущему процессу сообщение "Р2-ОК" и, получив ответ, выдает его на экран и терминируется.
Аналогично ведет себя каждый вновь запущенный процесс цепочки.