- •Министерство образования и науки Украины
- •Практическое занятие №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.
Выполните рассмотренную последовательность действий.
УПРАЖНЕНИЕ 2.2.
Подготовьте несколько простейших программ, с бесконечным (или длительным) временем исполнения (используя, например, бесконечный цикл), осуществляющих ввод и вывод информации. Осуществите запуск нескольких экземпляров этих программ (возможно использование этих программ совместно с командой yes). Проверьте возможность уничтожения, приостановки, перевода в фон и на передний план этих программ в различных сочетаниях. Проанализируйте результаты.
УПРАЖНЕНИЕ 2.3.
Проверьте следующие возможности.
Указать фоновое задание в оболочке Korn можно несколькими путями. На задание можно сослаться по ИД любого его процесса, или одним из следующих способов:
%Номер |
Указывает на задание с конкретным номером. |
%Строка |
Указывает на задание, командная строка которого начинается со Строки. |
%?Строка |
Указывает на задание, командная строка которого содержит Строку. |
%% |
Указывает на текущее задание. |
%+ |
Эквивалентно %%. |
%- |
Указывает на предыдущее задание. |
3. Содержание отчёта
Номер, название и цель практической работы.
Краткое описание действий и анализ результатов выполненной работы (упражнения 2.1 – 2.3).
Выводы, содержащие оценку наличия (или отсутствия) ограничений на количество фоновых работ и работ переднего плана. А так же ограничения на ввод и вывод информации для фоновых работ.
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №14
Запись и чтение информации из/в файл
Цель – изучение системных вызовов для записи и чтения информации из/в файл
1. Краткие теоретические сведения
1.1. Функции базового ввода/вывода
Функции стандартной библиотеки ввода/вывода, обеспечивая программе максимальную мобильность, в то же время не реализуют всех возможностей по управлению вводом/выводом, предоставляемых операционной системой QNX, которые могут потребоваться при создании приложений реального времени. В этом случае необходимо воспользоваться функциями, реализующими системные вызовы ввода/вывода QNX.
1.2. Открытие файла
Для открытия или создания файла используется функция:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int oflag [,mode_t mode]);
Функции open()позволяют процессу открыть файл (устройство), имя которого указано в path. Это имя может быть как абсолютным (полным, начинающимся с корневого каталога /), так и относительным (указанным относительно текущего каталога). Для открытого файла создается новый дескриптор, который не разделяется с каким-либо другим процессом в системе. Режим доступа к открытому файлу устанавливается согласно значению флагов, сформированных в разрядах аргумента oflag.
Значение oflag является целым значением и строится с использованием операции поразрядного "ИЛИ" над значениями флагов, символические константы для которых определены в заголовочном файле <fcntl.h>. Флаги позволяют определить режим открытия и доступа к существующему или вновь создаваемому файлу, а также уточнить реализацию выбранного режима доступа. Значения и семантика флагов следующая:
O_RDONLY - открыть существующий файл только для чтения;
O_RDWR - открыть для чтения и записи;
O_WRONLY -открыть только для записи.
Выбранный режим доступа к открываемому файлу уточняется флагами:
O_APPEND - если этот флаг установлен, то для режимов, допускающих запись в файл (O_RDWR и O_WRONLY), перед каждой операцией записи указатель файла будет устанавливаться в конец этого файла.
O_DSYNC - если этот флаг установлен, то каждый запрос write() будет ждать, пока все данные не будут успешно записаны. То есть все записи в файл, а также соответствующие им изменения в метаданных файла будут сохранены на внешнем носителе.
O_RSYNC - если этот флаг установлен, то каждый запрос read() завершается только тогда, когда данные успешно прочитаны.
O_SYNC - если этот флаг установлен, то каждый запрос read() или write() завершается только тогда, когда данные успешно прочитаны или записаны. Все записи в файл, а также соответствующие им изменения в метаданных файла будут сохранены на внешнем носителе.
O_CREAT - установка этого флага указывает, что если открываемый файл с указанным именем не существует, то необходимо создать новый файл и открыть его для записи. Если файл с указанным именем уже существует, то будет ли открыт этот файл, или создан новый файл для записи, или функция open() завершится с ошибкой определяется значением флага O_EXCL.
O_EXCL - флаг используется совместно с O_CREAT. При его установке новый файл будет создан только в том случае, если файл с указанным именем не существует и это же действие с тем же именем файла в данный момент не выполняется другими процессам. В противном случае возвращается ошибка создания файла. Если флаг не установлен, то при наличии файла с указанным именем флаг O_CREAT игнорируется и открывается существующий файл. Флаг O_EXCL без O_CREAT также игнорируется.
O_NONBLOCK - если этот флаг установлен, то функция open() завершается без ожидания, когда устройство будет готовым или доступным. Последующее поведение устройства определяется его спецификой. Если флаг очищен, то функция open() ждет, прежде чем завершиться, когда устройство будет готовым или доступным. Готовность устройства определяется его спецификой. В некоторых случаях реакция на флаг не определена.
O_TRUNC - если файл существует, является обычным файлом и он успешно открыт в режиме O_WRONLY или O_RDWR, то длина файла усекается до нуля, а права доступа и владелец оставлены неизменными. Флаг не имеет никакого эффекта для файлов устройств или каталогов. Если файл открывается как O_RDONLY, флаг O_TRUNC игнорируется.
Аргумент mode имеет значение только когда создается новый файл и позволяет задать для файла права доступа пользователей.
Значение mode является целым значением и строится с использованием операции поразрядного "ИЛИ" над значениями флагов, специфицирующих права доступа к вновь создаваемому файлу.
Устанавливаемые права доступа и дополнительные атрибуты файла определяются следующими символическими значениями флагов (определены в заголовочном файле <sys/stat.h>):
Флаг |
Значение |
S_IRWXU |
Установить право на чтение, запись и выполнение для владельца |
S_IRUSR |
Установить право на чтение для владельца |
S_IWUSR |
Установить право на запись для владельца |
S_IXUSR |
Установить право на выполнение для владельца |
S_IRWXG |
Установить право на чтение, запись и выполнение для группы |
S_IRGRP |
Установить право на чтение для группы |
S_IWGRP |
Установить право на запись для группы |
S_IXGRP |
Установить право на выполнение для группы |
S_IRWXO |
Установить право на чтение, запись и выполнение для остальных |
S_IROTH |
Установить право на чтение для остальных |
S_IWOTH |
Установить право на запись для остальных |
S_IXOTH |
Установить право на выполнение для остальных |
В результате выполнения функция open() возвращает неотрицательное целое число (дескриптор файла), представляющее наименьшее значение неиспользуемого дескриптора файла. Для файла с прямым доступом указатель файла установлен в начало. В случае ошибки, возвращается -1 и устанавливается errno.
Замечание. При запуске программы для неё автоматически создаются три дескриптора: стандартный ввод – 0, стандартный вывод – 1, стандартный вывод сообщений об ошибках – 2.
Частным случаем функции open() является функция:
#include <fcntl.h>
int creat(const char *pathname, mode_t mode]);
Эта функция создает и открывает новый файл с именем, указанным в pathname, и правами доступа, заданными в mode. Она эквивалентна вызову:
open("myfile.dat",O_WRONLY|O_CREAT|O_TRUNC,mode);
При успешном выполнении функция creat() возвращает дескриптор файла, в случае ошибки возвращается -1 и устанавливает errno.
Пример:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main( void ) {
int fd;
/* создать и открыть файл для записи*/
/* заменить существующий файл*/
/* создать с правами чтения/записи для владельца */
fd=open("myfile.dat",O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);
/* открыть существующий файл для чтения */
fd = open("myfile.dat", O_RDONLY);
/* открыть существующий файл для дозаписи или создать новый файл для записи, если такой файл не существует, с правами доступа на чтение/запись для всех*/
fd = open("myfile.dat", O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
returnEXIT_SUCCESS;
}