Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Metodicheskie ukazaniya UNIX 2014

.pdf
Скачиваний:
9
Добавлен:
11.02.2016
Размер:
414.29 Кб
Скачать

2.2 Завдання до лабораторних робіт по темі «Програмування під

LINUX»

Завдання 1

Програма «Hello World»

Щоб відразу почати програмувати, створимо ще один клон відомої програми "Hello World". Що робить ця програма, ви знаєте. Відкриємо текстовий редактор і наберемо в ньому наступний текст:

/* Hello.c */ #include <stdio.h> int main (void)

{

printf ("Hello World \n");

}

Назвемо свій файл hello.c. Вміст файлу hello.c - це вихідний код програми, а hello.c - це вихідний файл програми.

Вихідний код написаний на мові програмування C.

Щоб відкомпілювати наш Hello World достатньо набрати в командному рядку наступне заклинання:

$ gcc -o hello hello.c

$

Якщо вихідний код написаний без синтаксичних помилок, то компілятор завершить свою роботу без будь-яких повідомлень.

Набравши команду ls побачимо новий файл з ім'ям hello. Цей файл містить виконуваний код програми (бінарник).

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

Залишилося тільки запустити отриманий бінарник. Для цього набираємо в командному рядку таку команду:

$ ./hello Hello World

$

Завдання 2

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

одному файлі, то такий код стане просто нечитабельним. До того ж, якщо

21

програма компілюється досить довго (особливо це відноситься до мови C++), то після виправлення однієї помилки, потрібно перекомпілювати весь код.

Куди краще розкидати вихідний код по декількох файлах (осмислено, з

якого-небудь критерію), і компілювати кожен такий файл

окремо.

Щоб відкомпілювати мультіфайлову програму, треба спочатку

створити

об'єктний код з кожного вихідного файлу окремо. Кожен такий код буде являти собою об'єктний модуль. Кожен об'єктний модуль записується в окремий об'єктний файл. Потім об'єктні модулі треба скомпонувати в один бінарник

В Linux як лінковщік використовується програма ld, що володіє пристойним арсеналом опцій. Gcc самостійно викликає компоновщик з потрібними опціями.

Напишемо мультіфайловий Hello World. Створимо перший файл з іменем main.c:

/* Main.c */ int main (void)

{

print_hello ();

}

Тепер створимо ще один файл hello.c з наступним змістом: /* Hello.c */

#include <stdio.h> void print_hello (void)

{

printf ("Hello World \ n");

}

Тепер потрібно отримати два об'єктних файлу. $ gcc -c main.c

$ gcc -c hello.c $ ls

hello.c hello.o main.c main.o

$

Отже, ми отримали два об'єктних файлу. Тепер їх треба об'єднати в один бінарник:

$ gcc -o hello main.o hello.o $ ls

hello * hello.c hello.o main.c main.o $ ./hello

Hello World

$

22

Завдання 3

Автоматичне прибирання В попередньому завданні для створення бінарники з двох вихідних

файлів нам довелося набрати три команди. Якби програму довелося налагоджувати, то кожен раз треба було б вводити одні і ті ж три команди.

Вихід із ситуації, що склалася є. Це утиліта make, яка працює зі своїми власними сценаріями. Сценарій записується у файлі з іменем Makefile і поміщається в репозиторій (робочий каталог) проекту.

Найголовніша перевага make - це "інтелектуальний" спосіб рекомпіляції: в процесі налагодження make компілює тільки змінені файли.

Те, що виконує утиліта make, називається складанням проекту, а сама утиліта make відноситься до розряду складальників.

Будь Makefile складається з трьох елементів: коментарі, макроозначення і цільові зв'язки (або просто зв'язки). В свою чергу зв'язки складаються теж з трьох елементів: мета, залежності і правила.

Сценарії make використовують однорядкові коментарі, що починаються з літери # (решітка).

Спробуємо скласти сценарій збірки для розглянутого в попередньому розділі мультіфайлового проекту Hello World. Створіть файл з ім'ям Makefile:

# Makefile for Hello World project hello: main.o hello.o

gcc -o hello main.o hello.o main.o: main.c

gcc -c main.c hello.o: hello.c gcc -c hello.c clean:

rm -f * .o hello

Зверніть увагу, що в кожному рядку перед викликом gcc, а також у рядку перед викликом rm стоять табуляції. Як ви вже здогадалися, ці рядки є правилами. Формат Makefile вимагає, щоб кожне правило починалося з табуляції. Тепер розглянемо все по порядку.

Тепер залишилося запустити сценарій. Формат запуску утиліти make

наступний: make [опції] [мети ...] $ make

gcc -c main.c gcc -c hello.c

gcc -o hello main.o hello.o $ ls

hello * hello.c hello.o main.c main.o Makefile $ ./hello

23

Hello World

$

Завдання 4

Модель КІС (Клієнт-Інтерфейс-Сервер)

Модель КІС - це елегантна концепція розподілу вихідного коду в репозиторії (робочий каталог, в якому знаходяться вихідні коди, сценарії збірки (Makefile) та інші файли, що відносяться до проекту), в рамках якої всі вихідні коди можна поділити на клієнти, інтерфейси і сервери.

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

Інтерфейс (протокол) - це умовний набір правил, згідно з якими взаємодіють клієнт і сервер.

Зазвичай для організації інтерфейсів використовуються оголошення (прототипи), які поміщаються найчастіше в заголовні файли. У мові C це файли з розширенням .h; в мові C ++ це файли з розширенням .h, .hpp або без розширення.

Включаючи в програму заголовний файл директивою #include, ми погоджуємося працювати з сервером (будь то бібліотека або простий об'єктний файл) за його протоколу

Тепер спробуємо застосувати модель КІС на практиці для нашого проекту Hello World. Створимо файл hello.h:

/* Hello.h */

void print_hello (void);

Тепер включимо цей файл в main.c: / * Main.c * /

#include "hello.h" int main (void)

{

print_hello ();

}

Так як в проект був доданий новий файл, треба зробити повну зборку ще

раз:

$ Make clean rm -f * .o hello $ make

gcc -c main.c gcc -c hello.c

gcc -o hello main.o hello.o $ ./hello

24

Hello World Goodbye World

$

Програма стала більш правильною, більш витонченою і, найголовніше, більш безпечною.

25

ДОДАТОК

Таблиця 1. Основні параметри команди rm

 

 

Параметр

Призначення

 

 

 

 

 

 

 

 

-i

 

видалення з підтвердженням видалення

 

 

 

 

 

-r

 

рекурсивне видалення

 

 

 

 

 

 

 

-f

 

видалення

всіх

файлів

без

 

 

 

 

 

 

 

підтвердження

 

 

 

 

 

 

 

 

-v

 

докладний опис вироблених дій

 

 

 

 

 

 

 

 

 

Таблиця 2. Основні параметри команди ls

Параметр

Призначення

 

 

 

 

 

 

-a

список файлів і каталогів з прихованими

 

 

 

 

-l

список у один стовпчик (виводиться тип файлу,

 

 

 

 

права доступу до файлу, кількість жорстких

 

 

 

 

посилань на файл, ім'я власника, ім'я групи,

 

 

 

 

розмір файлу (в байтах), тимчасової штамп та

 

 

 

 

ім'я файлу.

 

 

 

 

 

 

-h

відображення розмірів файлів у зручному для

 

 

 

 

людини вигляді (10M, 15K)

 

 

 

 

 

-i

Відображення inode елементів

 

 

 

 

-t

сортування за датою модифікації (від старих до

 

 

 

 

нових) /time

 

 

 

 

 

 

-S

Впорядкувати за розміром (від великих до

 

 

 

 

маленьких) /size

 

 

 

 

 

 

-r

сортування в зворотному порядку

 

 

 

 

-R

Список з підкаталогами

 

 

 

 

 

 

 

 

Таблиця 3. Комбінації клавіш текстового редактора nano

 

Ctrl-X

 

 

закрити редактор

 

 

 

 

 

Ctrl-O

 

 

зберегти

 

 

 

 

 

 

 

 

 

 

 

 

Ctrl-C

 

 

номер рядка \ поточна позиція

 

 

 

Ctrl-W

 

 

пошук

 

 

 

 

 

 

 

Ctrl- W потім Ctrl-T

перехід до рядка №

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ctrl-K

 

 

вирізати рядок

 

 

 

 

 

 

Ctrl-U

 

 

вставити з буфера

 

 

 

 

 

Alt-A

 

 

виділення (поза X)

 

 

 

 

 

Alt-6

 

 

копіювати в буфер

 

 

 

 

26

ЛІТЕРАТУРА

1.Тузова І.А. Курс лекцій «Операційна система Unix»

2.Рубльов І.С., Кутяков Д.В. Основи. Файлова система ОС Unix. навчальний посібник

3.Системна довідкова служба Linux Man

4.Робачевскій А.М. «Операційна система Unix®». - СПб .: БВХ - СанктПетербург, 2010. - 528 с, іл.

5.http://rus-linux.net/MyLDP/consol/hdrguide/linux.htm#ln

6.http://valery.narod.ru/hitro/linux.htm

7.http://www.ibm.com/developerworks/ru/library/l-lpic1-v3-104-6/index.html

27

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