Національний університет «Львівська політехніка»
Інститут комп’ютерних технологій, автоматики та метрології
ІКТА
Кафедра БІТ
Звіт
Лабораторна робота № 3
«Системні виклики та робота з файлами в ОС Linux»
Варіант – 14
Львів 2018
Мета роботи
Оволодіти практичними навичками роботи з компілятором GCC та системними викликами в операційній системі Linux. Ознайомитись із механізмом виконання системних викликів, процесом компіляції та побудови виконавчих файлів в ОС Linux.
Теоретичні відомості
1. Знайомство з компілятором GCC
Засобами, традиційно використовуваними для створення програм для відкритих операційних систем, є інструменти розробника GNU. Проект GNU був заснований в 1984 році Річардом Столлманом. Його необхідність була викликана тим, що в той час співпраця між програмістами не обходилась без труднощів, оскільки власники комерційного програмного забезпечення чинили численні перешкоди для такої співпраці. Метою проекту GNU було створення комплекту програмного забезпечення під єдиною ліцензією, яка не допускала б можливості присвоювання кимось ексклюзивних прав на це ПЗ. Частиною цього комплекту і є набір інструментів для розробника, яким ми і будемо користуватися, і який повинен входити в усі дистрибутиви Linux.
Одним з цих інструментів є компілятор GCC. Спочатку ця абревіатура розшифровувалась, як GNU C Compiler. Зараз вона означає - GNU Compiler Collection. Розглянемо створення простої програми за допомогою GCC. За сформованою традицією перша програма буде просто виводити в консолі привітання «Hello world!».
2. Системні виклики
Під терміном «системний виклик» в програмуванні та обчислювальній техніці розуміють звернення прикладної програми до ядра операційної системи (ОС) для виконання будь-якої операції.
Сучасні операційні системи (ОС) передбачають поділ часу між обчислювальними процесами, що виконуються (багатозадачність) і розділення повноважень, що перешкоджає виконуваним програмам звертатися до даних інших програм і обладнання. Ядро ОС виконується в привілейованому режимі роботи процесора. Для виконання міжпроцесної операції або операції, що вимагає доступу до обладнання, програма звертається до ядра, яке, в залежності від повноважень викликає процес, виконує або відмовляє у виконанні такого виклику. З точки зору програміста, системний виклик зазвичай виглядає як виклик підпрограми або функції з системної бібліотеки. Однак системний виклик, як окремий випадок виклику такої функції або підпрограми, слід відрізняти від більш загального звернення до системної бібліотеки, оскільки останнє може і не вимагати виконання привілейованих операцій.
Завдання
Варіант – 14
Створити три файли з кодом на мові С. Два файли з вихідним кодом на мові С, перший повинен містити процедури, що реалізують задане варіантом завдання, а другий функцію main. Третій файл – заголовний (.h). Створити Make-файл, що міститиме правила для створення виконавчого файлу, а також правила clean, install і uninstall.
За допомогою системних викликів у своїй домашній директорії створити дворівневу структуру директорій. У директорії другого рівня створити 2 файли та виконати їх копіювання у директорію першого рівня. Реалізувати обробку помилок, які можуть виникнути в ході роботи програми.
Хід роботи
Використані системні виклики:
mkdir
creat
open
read
write
Текст програми
1. Makefile.
lab3: functions.o lab3.o
gcc functions.o lab3.o -o lab3
functions.o: functions.c functions.h
gcc -c functions.c
lab3.o: lab3.c functions.h
gcc -c lab3.c
clean:
rm -f lab3 functions.o lab3.o
install:
cp lab3 /usr/local/bin/lab3
uninstall:
rm -f /usr/local/bin/lab3
2. functions.h.
int main(int argc, char* argv[]);
int executeTask(char* argv[]);
int createDir(const char* path);
int createFile(const char* path);
int copyFile(const char* src, const char* dest);
3. lab3.c.
#include <stdio.h>
#include "functions.h"
int main(int argc, char* argv[]) {
int res;
if (argc == 5) {
res = executeTask(argv);
} else ...