- •Міністерство освіти і науки України
- •Жуковецька с.Л., Шестопалов с.В.
- •Анотація
- •Введення
- •Лабораторна робота №1 Технологія розробки програм у середовищі Linux
- •1. Команди роботи з командним інтерпретатором ос unix
- •2. Створення програми
- •3. Функції введення-виведення.
- •4. Приклад програми
- •5. Основні керуючі конструкції мови с
- •6. Індівідуальні завдання
- •Лабораторна робота № 2. Автоматизація пакетних завдань
- •1. Компіляція багатомодульною програми
- •2. Автоматизація пакетних завдань
- •4. Завдання
- •Лабораторна робота № 3. Взаємодія програми з середовищем виконання
- •1. Аргументи командного рядка
- •2. Змінні оточення
- •3. Індівідуальні завдання
- •Лабораторна робота №4. Контроль виконання програми
- •1. Коди завершення програми
- •2. Функції обробки значення errno
- •3. Функція atexit()
- •4. Макрос asssert()
- •5. Індівідуальні завдання
- •Лабораторна робота №5 Файлові api.
- •1 Основні поняття
- •2. Права доступу до файлів
- •3. Інтерфейси для файлового введення / виводу
- •4. Системні виклики роботи з файлами
- •5. Індівідуальні завдання
- •Варіанти завдань
- •Лабораторна робота №6 Робота з каталогами та посиланнями
- •Методичні вказівки
- •1. Створення та видалення каталогу
- •2. Читання каталогу
- •3. Зміна каталогу
- •4. Управління жорсткими посиланнями
- •5. Управління символічними посиланнями
- •6. Перейменування файлів і каталогів
- •7. Індівідуальні завдання
- •Лабораторна робота №7. Одержання і відображення метаданих файлу.
- •Методичні вказівки
- •1. Механізми управління файлами ос unix
- •2. Отримання даних індексного дескриптору
- •3. Додаткові функції маніпулювання даними індексних дескрипторів
- •4. Отримання даних про відкриті файли
- •5. Індівідуальні завдання
- •Лабораторна робота №8. Керування процесами
- •Методичні вказівки
- •1. Загальні поняття
- •2. Створення поцесу
- •4. Перезавантаження програми процесу
- •5. Завершення виконання процесу
- •6. Системні виклики wait, waitpid
- •7. Індівідуальні завдання
- •Лабораторна робота №9. Використання каналів
- •Методичні вказівки
- •1. Заганьні відомості
- •2. Використання каналів
- •3. Індівідуальні завдання
- •Варіанти завдань
- •Лабораторна робота №10 Використання повідомлень
- •Методичні вказівки
- •1. Загальні відомості
- •2. Використання повідомлень
- •3. Індівідуальні завдання
- •Література
- •Системне програмування Посібник до виконання лабораторних та самостійних робіт
- •65082, Одеса, вул. Дворянська, 1/3
4. Завдання
1. Багатомодульна компіляція. Написати програму-калькулятор для виконання одного з 4-х арифметичних дій. Кожна дія має бути оформлене у вигляді окремої функції в окремому файлі.
2. Автоматизація компіляції. Написати також Makefile, що реалізує наступні завдання:
компіляцію програми-калькулятора, в результаті якої має бути отримано чотири виконуваних файлу,
компіляція повинна початися з повідомлення про те, які вихідні файли будуть використані,
після закінчення компіляції вихідні файли повинні бути видалені,
запуск утиліти make НЕ використовує ім'я мети.
Лабораторна робота № 3. Взаємодія програми з середовищем виконання
Мета: Оволодіння методами використання зовнішніх даних при розробці програм. Знайомство з поняттям зовнішнього середовища прграми.
Завдання для самостійної підготовки:
Вивчити:
призначення та способи обробки змінних оточення;
принципи використання змінних оточення в програмі;
призначення та способи обробки аргументів командного рядка;
принципи використання аргументів командного рядка в програмі.
Методичні вказівки
1. Аргументи командного рядка
Функція main () є головною функцією, визначеною користувачем, якій буде передано керування.
Функція main визначається наступним чином:
main (int argс, char * argv [], char * envp [])
1 2 3
1 - кількість аргументів командного рядка
2 - список аргументів командного рядка
3 - список змінних оточення
При запуску будь-яка програма UNIX отримує від зухвалої процесу два набори даних: аргументи командного рядка і змінні середовища оточення. У програмах на мові С обидва набори представлені у вигляді масивів покажчиків, причому останній покажчик у кожному з масивів має значення NULL. Крім того, програма отримує лічильник, що містить кількість елементів у масиві аргументів.
Аргументи командного рядка це додаткові інформаційні елементи, що передаються програмі під час запуску. Вони задаються в командному рядку і відділяються від імені програми і один від одного пробілами. (Аргумент, що містить пробіл, повинен екрануватися.)
Ім'я самої програми теж входить до списку аргументів. Наприклад, викликається програма ls, що відображає вміст кореневого каталогу та розміри відповідних файлів:
%ls –s /
У даному випадку список аргументів програми ls складається з трьох елементів. Перший - це ім'я самої програми, вказане в командному рядку, а саме ls. Другий і третій елементи - аргументи командного рядка-s і /.
Масив argv [] має довжину argс
Елемент argv [0] дорівнює імені програми,
argv [1] вказує на перший парамет і т. д. до argv [argc-1].
Нехай:
void main (int argc, char * argv [] , char * envp []);
Якщо ми наберемо команду
$ a.out a1 a2 a3
то функція main програми з файлу a.out викличеться з
argc = 4 / * кількість аргументів * /
argv [0] = "a.out"
argv [1] = "a1"
argv [2] = "a2"
argv [3] = "a3"
argv [4] = NULL
Якщо програма не передбачає прийом аргументів, то argc і argv можуть бути опущені. Робота з аргументами командного рядка зводиться до перегляду параметрів argc і argv.
Наведемо приклад програми, яка виводить ім'я програми, кількість переданих параметрів і значення цих параметрів.
# Include <stdio.h>
int main (int argc, char * argv [])
{printf("The name of this program is '% s'. \ N", argv [0]);
printf ("This program was invoked with% d arguments. \ n ", argc-1);
/ * Чи є хоч один аргумент? * /
If (argc> 1)
{int i;
printf ("The arguments are: \ n");. •
for (i = 1; i <argc; + + i)
printf ("% s \ n", argv [i]);}
return 0;}