Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Кафедра автоматики и электроники в машиностроенииСтр 1 из 6Следующая ⇒
Филоненко И.Н.
«Системное программирование»
Лабораторный практикум
Коломна
Системное программирование: Лабораторный практикум для студентов очной и очно-заочной формы обучения для специальностей: 230105 – Программное обеспечение вычислительной техники и автоматизированных систем, 220201- «Управление и информатика в технических системах»: Сост. Филоненко И.Н. – Коломна: КИ (ф) МГОУ, 2010. – 53 с. Лабораторный практикум составлен в соответствии с Государственными образовательными стандартами высшего профессионального образования по направлению подготовкидипломированного специалиста230105 – « Программное обеспечение вычислительной техники и автоматизированных систем », 220201- «Управление и информатика в технических системах».
Лабораторный практикум одобрен на заседании кафедры «Автоматика и электроника в машиностроении» Коломенского института (филиала) МГОУ (протокол № 6 от 15.03.10) и утвержден учебно-методическим советом.
УДК 004.4 ББК 32.97 © Филоненко И.Н. © КИ (ф) МГОУ, 2010 Введение
Цикл лабораторных работ направлен на освоение студентами принципов построения и функционирования операционных систем и вопросов создания параллельных взаимодействующих задач, выполняющихся в мультизадачных операционных системах. Практическую реализацию заданий практикума предлагается разрабатывать на языке программирования С и отлаживать под управлением ОС UNIX или Linux. В процессе выполнения лабораторных работ студенты осваивают работу в ОСUNIX под управлением командного интерпретатора Bourne Shell, а также создание параллельных процессов в UNIX и алгоритмы их взаимодействия с использованием интерфейса системных вызовов, описанных в POSIX – стандарте. Первая работа (4 часа) посвящена практическому освоению базовых принципов программирования на языке С в ОС UNIX. Вторая работа (4 часа) направлена на освоение принципов работы под управлением командного интерпретатора Bourne Shell в ОС UNIX, изучение языка интерпретатора Bourne Shell и организацию сценариев, выполняемых этим интерпретатором. Третья работа (8 часов) предназначена для освоения программного управления (на С ) свойствами процесса в ОС UNIX, а также программирование создания процесса в ОС UNIX средствами языка С. Во второй части работы(4 часа) студенты осваивают моделирование команд интерпретатора Bourne Shell в программах на языке С с низкоуровневым управлением вводом-выводом средствами С. Четвертая работа (8 часов) посвящена практическому освоению организации взаимодействия процессов через pipe в программах на С в UNIX а так же реализации модели клиент-сервер с использованием FIFO.
Лабораторная работа № 1 Введение в язык С
Цель работы Освоить на практике организацию программ на языке С, применение основных функций ввода/вывода, управляющих структур, структур данных типа массив, а так же отладку и выполнение программ в ОС UNIX (Free BSD).
Домашнее задание 1. Изучить структуру программ на С. 2. изучить синтаксис объявления величин в программе на С. 3. Освоить синтаксис и выполнение управляющих структур языка С: присвоение, разветвление, цикл. 4. изучить организацию ввода/вывода с помощью библиотечных функций С ( Scanf, printf, getchar, putchar ). 5. изучить команды компиляции программы на С в ОС UNIX ( gcc ) и запуск исполняемого файла ( a.out ).
Выполнение работы 1. Загрузить версию ОС UNIX – PC BSD 4.0. 2. Открыть терминальное окно для организации режима командной строки. 3. Организовать собственную папку в домашней директории /Home/Student. 4. Войти в редактор Kwrite и файл Noname сохранить в своей папке под собственным именем с расширением .с. 5. Набрать текст простой программы на С для вывода на экран сообщения: «Hello, world»: # include < stdio.h> Main() { Printf(“Hello, world”); } и сохранить текст в файле с расширением .с. 6. Откомпилируйте программу с помощью команды: > gcc firle1.c Если компиляция прошла без ошибок, должен быть сформирован файл исполняемый a.out. Примените ключ (-о) для получения откомпилированного файла с собственным именем file1.out. Запустите file1.out на выполнение и проверьте полученный на экране вывод. 7. Измените программу так, чтобы каждое из слов фразы «Hello, world» выводилось с новой строки (ключ (\n)). 8. Наберите в файле file2.c программу для вывода таблицы температур по Фаренгейту и их соответствие по шкале Цельсия (формула 0С=(5/9)(0F-32) ); #include < stdio.h> Main() { Int far, cels, lo, up, step; lo=0; up=300; step=20; far=lo; while (far< =up){ cels=5*(far-32)/9; printf(“%d\t %d\n”, far, cels); far=far+step; } } Измените выражение для вычисления след.обр.: cels=5/9*(far-32); Объясните полученный результат. Измените программу так, чтобы выводились результаты как вещественные числа с фиксированной точкой, и организуйте вывод заголовка над таблицей. 9. Измените программу следующим образом: а) чтобы вывод таблицы был прежним, но вместо оператора цикла while используйте оператор: for (< пар.ц.> =< нач. знач.>; < пар. ц.> < =< кон. знач.>; < пар.ц.> = < пар.ц.> + < шаг> ) {операторы тела цикла}; убедитесь в идентичности выводимой таблицы прежнему варианту; б) вместо задания значений параметрам с помощью присваиваний используйте функцию scanf, которая считывает данные из потока ввода. Например, для ввода даты: Int day, year; char month[20]; scanf(“%d %s %d”, & day, month, & year); Внимание: аргументы функции scanf должны быть указателями. 10. Наберите в редакторе kwrite программу для подсчета символов во входном потоке, который заканчивается специальной константой EOF (это целое число): #include < stdio.h> Main() { Int nc; Nc=0; While (getchar()! = EOF) ++nc; Printf(“%d\n”, nc); } 11. Напишите и отладьте программу на С для подсчета числа строк во входном потоке (каждая строка заканчивается символом (\n)). 12. Составьте программу на языке С в соответствии с вариантом задания табл. 1, отладьте ее и включите в отчет по лаб. раб.
Таблица 1
Контрольные вопросы
1. Структура программы на языке С. 2. Назначение директивы include. 3. Функции для управления вводом / выводом на С. 4. Объясните назначение и использование системной константы EOF. 5. Организация статического и динамического массива в программе на С. 6. Организация строки в языке С.
Лабораторная работа № 2 Основы работы в OC UNIX. Работа с командным интерпретатором Bourn Shell в интерактивном режиме. Организация командных файлов
Цель работы
Изучить работу команд интерпретатора Bourne Shell в ОС UNIX; освоить синтаксис написания команд и организацию командного файла (скрипта) в ОС UNIX. Освоить работу в одном из текстовых редакторов UNIX (например, KWriter). С помощью языка Bourne Shell научиться составлять скрипты и работать с ними.
Содержание работы
1. Изучить программные средства языка интерпретатора Bourn Shell. 2.Ознакомиться с устройством файловой системы UNIX (упрощенное понятие). Изучить основные команды для работы с файлами, пользуясь методическими указаниями. Выполнить в интерактивном режиме задания 1-6. 3. Освоить правила организации и запуска скрипта в OC UNIX. Выполнить задание 7. 4. Освоить структуру программы на С, функции ввода/вывода. Выполнить задание 8. 5. Составить отчет и защитить работу преподавателю, ответив на контрольные вопросы.
Работа в современной версии ОС UNIX существенно отличается от работы с ОС UNIX пятнадцатилетней давности. Широкое распространение получил графический интерфейс, множество цветов, всевозможные графические утилиты настройки различных подсистем и т.д. Тем не менее, основой основ пользовательской среды и соответственно взаимодействия между пользователем и ОС является командная строка. Основные назначения командного интерпретатора в ОС UNIX
1. При регистрации пользователя в системе первой запускаемой программой является командный интерпретатор. С него начинается " жизнь" всех остальных пользовательских процессов. Рассмотрим более подробно примерную схему работы пользователя в ОС UNIX. После запуска ОС инициализирует процесс getty(1M) (сервер терминального доступа), запускающий программу login (1), запрашивающую у пользователя имя и пароль для входа в систему. 2. Если пользователь ввел корректные имя и пароль , login(1) запустит программу, путь к которой указан в последнем поле файла passwd, как правило, являющейся командным интерпретатором. Командный интерпретатор исполняет инициализационный файл и выдает системное приглашение на терминал. После этого пользователь может начинать свою обычную работу. После завершения работы командного интерпретатора (например, командой exit ) пользователь завершает свою работу в системе. 3. Командный интерпретатор - это удобный и простой язык программирования очень высокого уровня, позволяющий конструировать из различных утилит UNIX сложные структуры. Исполняемые файлы, содержащие команды Shell, называются скриптами. 4. При входе пользователя в систему командный интерпретатор запускает инициализационный скрипт, устанавливающий конкретное окружение пользователя, такие как тип терминала, пути поиска программ, путь к почтовому ящику и т.д. Естественно, для каждого командного интерпретатора существует свой специальный инициализационный файл. Для командного интерпретатора Bourne Shell - инициализационный файл - profile.
Синтаксис языка Bourne Shell Bourne Shell является достаточно развитым языком программирования даже для выполнения достаточно сложных заданий. Но, из-за особенностей работы скриптов shell (аналогично вводу с пользовательского терминала) не следует ждать высокой скорости обработки. Для этих задач существует, например, язык С.
Общий синтаксис скрипта Синтаксис вызова команды из командного интерпретатора в самом общем случае обычно выглядит следующим образом:
< command> < flags> < arguments> > ls -l /home/user1 Признаком флага является знак " -" перед флагом.
Командный интерпретатор позволяет группировать команды. cmd1; cmd2 - последовательное выполнение команд. cmd1 & - выполнение в фоновом режиме (демон). cmd1 & & cmd2 - выполнение cmd2 в случае успешного завершения cmd1. cmd1 || cmd2 - выполнение cmd2 в случае ненормального завершения cmd1. Для группировки команд можно также использовать скобки " {}". cmd1 & & cmd2; cmd3 - cmd2 будет выполнена только при условии успешного завершения cmd1, и не зависимо от этого будет далее выполнена cmd3. cmd1 & & {cmd2; cmd3} Обе команды cmd2 и cmd3 будут последовательно выполнены только в случае успешного завершения cmd1. Скрипт представляет собой самый обычный текстовый файл. Командный интерпретатор последовательно считывает строки этого файла и последовательно их исполняет. Для того чтобы можно было запустить скрипт на исполнение необходимо иметь права на чтение (командный интерпретатор читает строки файла) и на исполнение (запуск команд и утилит) этого скрипта.
Комментарием в shell является строка, начинающаяся со знака " #".
# ЭТО КОММЕНТАРИЙ
Комментарий не обязательно должен занимать всю строку, например: cat /var/run/inetd.pid # вывести на консоль PID интернет-супердемона
Поскольку в системе может находится не один командный интерпретатор, то путь к интерпретатору указывается в первой строке скрипта следующим образом:
#! /bin/sh
Переменные
variab1=25 # Не число 25, а строка " 25"
SYS ADMIN Используя утилиту echo(1) выполняем вывод на консоль переменной. Конечно, значение одной переменной можно присвоить другой переменной.
Read username
При запуске командный интерпретатор выведет строку " Введите свое имя" и будет ждать ввода с клавиатуры. Строка, введенная пользователем, и будет значением переменной username. При использовании любой переменной Shell подставляет ее значение.
Встроенные переменные
Кроме переменных, которые можно определить в явном виде, для Shell существуют также встроенные переменные, сокровенный смысл которых существует только в контексте получения ее значения.
" $*" - " $1 $2 $3..."
$@ - " $1" " $2" " $3" ....
#! /bin/sh $./script1.sh par1 par2 par3 echo script $0 script./script1.sh echo $1 $2 $3 par1 par2 par3
Здесь наблюдается полная аналогия с argv при вызове функции main() в языке С. Встроенную переменную $# используют в том случае, когда необходимо убедится в том, что скрипту было передано нужное количество параметров. Текст скрипта:
if [ $# -lt 3 ]; then echo missing parameters! usage: $0 par1 par2 par3 Exit 1 fi В данном скрипте используется условный параметр if и команда test. Интуитивно понятно, что происходит сравнение количества переданных параметров (переменная $#) и если это значение меньше 3, тогда на консоль выводится сообщение. Строка " exit 1" формирует код возврата скрипта равный единице. В OC UNIX за успешное завершение принят код возврата " 0". Если код возврата не равен нулю, это означает ошибку.
Популярное:
|
Последнее изменение этой страницы: 2016-05-03; Просмотров: 477; Нарушение авторского права страницы