Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR_СП_лабы_11.doc
Скачиваний:
7
Добавлен:
22.04.2019
Размер:
755.71 Кб
Скачать

Лабораторна робота №1 Технологія розробки програм у середовищі Linux

Мета: Оволодіння технологією розробки програм у системі UNIX. Знайомство з можливостями компілятора. Оволодіння навичками використання основних керуючих структур мови С.

Завдання для самостійної підготовки:

Вивчити:

  • команди роботи з файловою системою ОС UNIX;

  • організацію й структуру файлової системи UNIX, обмеження на імена файлів;

  • види й організацію об'єктних файлів ОС UNIX;

  • команди дослідження об'єктних файлів;

  • зміст основних заголовних файлів.

Методичні вказівки

1. Команди роботи з командним інтерпретатором ос unix

Команди для роботи з файловою системою

mkdir - створення каталогу

rmdir - виведення каталогу

touch - створення порожнього файлу

cat - виведення вмісту файлу

ls [-l] - виведення змісту каталогу [докладний]

cp - копіювання файлу

mv - перейменування / переміщення файлу

rmdir - видалення каталогу

rm - видалення файлу

rm-r - видалення каталогу з усім вмістом

cd - зміна поточного каталогу

(.. - батьківський, ~ - домашній, / - кореневий)

ln [-s] - створити жорстку [м'яку] посилання на файл

Інформаційні команди

man - довідкові дані по заданій команді

pwd – встановлення поточного положення у ф.с.

date - показати поточні дату і час

who - показати працюючих користувачів

ps - показати активні процеси

2. Створення програми

Розробка програми починається зі створення вихідних файлів, що містять текст мовою Си. Текстові файли виробляються за допомогою одного з текстових редакторів, підтримуваних у середовищі UNIX.

Хоча UNIX-Файли не мають розширень, задаємо створеному файлу розширення для того, щоб його міг розпізнати компілятор.

.c для мови С и .сс (або .С) для З++.

Програма може включати файли заголовків. Для цього використовується директива #include <ім'я заголовка>

Наприклад,

#include <fcntl.h>

При цьому якщо ім'я файлу укладене в уголковые дужки, це означає, що пошук файлу буде вироблятися в загальноприйнятих каталогах зберігання файлів заголовків. Якщо ж ім'я файлу заголовка укладено в лапки, то використовується явно зазначене або відносне ім'я файлу.

Таблиця 1

Зміст основних заголовних файлів

Файл заголовка

Призначення

<assert.h>

Містить прототип функції assert, що використовується для діагностики

<cpio.h>

Містить визначеннящо використовується для файлових архівів cpio

<ctype.h>

Містить визначення символьних типів, а також прототипи функцій класів символів

<dirent.h>

Містить визначення структур даних каталогу, а також фунцій для роботи з каталогами

<errno.h>

Містить визначення кодів помилок

<fcntl.h>

Містять прототипи системних викликів fcntl, open, creat, а також визначення констант і структур даних, необхідних при роботі з файлами

<float.h>

Містить визначення констант, необхідних для операцій із плаваючою крапкою

<ftw.h>

Містять прототипи функцій, що використовується для сканування дерева файлової системи, а також визначення використовуваних констант

Продовження таблиці 1

Файл заголовка

Призначення

<grp.h>

Містять прототипи функцій і визначення структур даних, що використовуються для роботи з групами користувачів

<langinfo.h>

Містить визначення мовних констант дня тижня, назва місяця, а також прототип функції langinfo()

<limits.h>

Містить визначення констант, що визначають значення обмежень для даної реалізації

<locale.h>

Містить визначення констант, що використовується для створення користувальницького середовища, що залежить від мовних і культурних традицій

<math.h>

Містить визначення математичних констант

<nl_types.h>

Містить визначення для каталогів повідомлень, а також прототипи функцій catopen і catclose

<pwd.h>

Містить визначення структури файлу паролів, а також прототипи функцій для роботи з ним

<regex.h>

Містить визначення констант і структур даних, що використовується у регулярних вираженнях, а також прототипи функцій для роботи з ними

<search.h>

Містить визначення констант і структур даних, а також прототипи функцій, необхідних для пошуку

<setjmp.h>

Містять прототипи функцій переходу, а також визначення пов'язаних з ними структур даних

<signal.h>

Містить визначення констант і прототипи функцій, необхідних для роботи із сигналами

<stdarg.h>

Містить визначення, необхідні для підтримки списків аргументів змінної довжини

<stddef.h>

Містить стандартні визначення

<stdio.h>

Містить визначення стандартної бібліотеки уведення-висновку

<stdlib.h>

Містить визначення стандартної бібліотеки

<string.h>

Містять прототипи функцій роботи з рядками

<tar.h>

Містить визначення, що використовуються для файлових архівів

<termios.h>

Містить визначення констант. Структур даних і прототипи функцій для термінального уведення-висновку

Продовження таблиці 1

Файл заголовка

Призначення

<time.h>

Містить визначення типів, констант і прототипи функцій для роботи із часом і датою, а також визначення, що ставляться до дат

<ulimit.h>

Містить визначення констант і прототип системного виклику ulimit() для керування обмеженнями, що накладаються на процес

<unistd.h>

Містить визначення системних символьних констант, а також прототипи більшості системних викликів

<utime.h>

Містить визначення констант і прототип системного виклику utime для роботи з тимчасовими характеристиками файлу

<sys/ipc.h>

Містить визначення, що ставляться до системи міжпроцесної взаємодії (IPC)

<sys/msg.h>

Містить визначення, що ставляться до системи IPC (повідомлення)

<sys/resource.h>

Містить визначення констант і прототипи системних викликів для керування розмірами ресурсів, доступних процесу

<sys/sem.h>

Містить визначення, що ставляться до системи IPC (семафори)

<sys/shm.h>

Містить визначення, що встановлюються до системи IPC(поділювана пам'ять)

<sys/stat.h>

Містить визначення структур даних і прототипи системних викликів, необхідних для одержання інформації про файли

<sys/times.h>

Містить визначення структур даних і прототип системного виклику times(), службовця для одержання статистики виконання процесу

<sys/types.h>

Містить визначення примітивів системних даних

<sys/utsname.h>

Містить визначення прототип системного виклику uname(), що використовується для одержання імен системи

<sys/wait.h>

Містить визначення констант і прототипи системних викликів, що використовуються для синхронізації родинних процесів

При розробці програм, а тим більше - складних, використовується принцип модульности, розбивки складної програми на складові частини, кожна з яких може зберігатися в окремому файлі й підготовлятися окремо.

В операційній системі Linux для компіляції програм написаних мовою C\C++ використовується компілятор GNU C\C++.

Найбільш популярними компіляторами для мови Си в середовищі ОС UNIX зараз є pcc (Ритчи й Томпсон) і gcc - GNU Compiler Collection - (Ричард Столлман).

Переваги gcc:

  • вільно поширюється.

  • gcc підтримується й супроводжується.

  • відкритість вихідних текстів дозволяють додавати до gcc нового кодогенераторы.

Більшість сучасних систем Unix поставляються із уже встановленими компіляторами.

Опції gcc:

Докладно про gcc можна довідатися, виконавши команду

info gcc

Найбільше часто вживаються наступні:

Таблиця 2

Оція

Призначення

-c

Тільки компіляція. З вихідних файлів програми створюються об'єктні файли у вигляді name.o. Компонування не виробляється.

-o file-name

Використовувати file-name як ім'я для створюваного gcc файлу (звичайно це файл, що виконується,).

-llibrary-name

Використовувати при компонуванні зазначену бібліотеку.

-v

Довідатися версію пакета gcc, що зараз використовується

-g

Генерує код для налагодження із символьним отладчиком sdb(1). Зауваження: при використанні опції -g таблиця символів не віддаляється.

-O

Викликає оптимізатор об'єктного коду, що зменшує розмір і збільшує швидкість програми за допомогою переміщення, об'єднання й видалення коду.

Продовження таблиці 2

Оція

Призначення

-S

Не викликає асемблер. Залишає результат у файлі з расширением.s. Цей файл буде містити команди мови асемблера, "рідного" для цільового комп'ютера.

Компіляція одного модуля:

У найпростішому випадку відкомпілювати програму можна, запускаючи компілятор командою

gcc ім'я_вихідного_файлу

Якщо програма була написана без помилок, то компілятор створить виконується файл, що, з ім'ям a.out. Змінити ім'я створюваного файлу, що виконується, можна, задавши його за допомогою опції -o:

gcc ім'я_вихідного_файлу -o ім'я_ щовиконується_файлу

Наприклад,

Gcc file.c -o file.exe або gcc -o file file.c

Запустити на виконання з поточного каталогу можна так:

./file

Щоб відкомпілювати вихідний код, що перебуває у файлі F.cc, і створити об'єктний файл F.o, виконаєте команду:

gcc -c <compile-options> F.c

Тут рядок compile-options указує можливі додаткові опції компіляції.

Отладчик gdb

Для налагодження програм використовується стандартний отладчик gdb. Формат його виклику наступний:

gdb <виконується файл, щоМ,> [<core файл>|<pid процесу>]

core файл – файл створюваний при аварійному виході програми при виникненні критичної помилки. Якщо core файл зазначений, він буде автоматично розібраний отладчиком gdb, і можна буде визначити, у якій крапці програми відбулася помилка. Якщо зазначено pid процесу, отладчик підключиться до цього процесу.

Розглянемо команди отладчика gdb.

B <номер рядка>

або

b <ім'я вихідного модуля>:<номер рядка> - установлює крапку останова в заданому рядку в зазначеному або поточному модулі;

r - запускає програму на виконання;

n - виконує черговий рядок програми без входу у функцію;

s - виконує черговий рядок програми із входом у функцію;

p <ім'я змінної> - виводить уміст змінної; q - вихід з отладчика.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]