Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
З В І Т
до лабораторної роботи №6
з курсу: «Операційні системи»
на тему:
«Системні виклики. Робота з компілятором GCC
в ОС GNU/Linux»
Варіант № 10
МЕТА РОБОТИ – оволодіти практичними навиками роботи з компілятором GCC та системними викликами в операційній системі GNU/Linux;
ознайомитись із механізмом виконання системних викликів, процесом компіляції та побудови виконавчих файлів в цій ОС.
Завдання
За допомогою системних викликів у своїй домашній директорії створити дворівневу структуру директорій. У директорії другого рівня створити 2 файли та перемістити їх у директорію першого рівня. Видалити пусту папку. Реалізувати обробку помилок, які можуть виникнути в ході роботи програми.
Тексти програм
Lab.h
#ifndef WORK_H_
#define WORK_H_
int lab(void);
#endif /*WORK_H_*/
Work.c
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "lab.h"
int lab(void)
{
mkdir("./level1", 0777);
mkdir("./level1/level2", 0777);
int fd1 = open("./level1/level2/a.txt", O_RDWR|O_CREAT, 0777); // Originally 777 (see comments)
int fd2 = open("./level1/level2/b.txt", O_RDWR|O_CREAT, 0777);
if (fd1 != -1) {
// use file descriptor
close(fd1);
}
if (fd2 != -1) {
// use file descriptor
close(fd2);
}
rename("./level1/level2/a.txt", "./level1/a.txt");
rename("./level1/level2/b.txt", "./level1/b.txt");
remove("./level1/level2");
return 0;
}
Main.c
#include <stdio.h>
#include "lab.h"
int main(void)
{
int Result = lab();
printf(Result);
return 0;
}
Makefile
work: work.o main.o
gcc work.o main.o -o startLab6 -lm
calculate.o: work.c lab.h
gcc -c work.c
main.o: main.c lab.h
gcc -c main.c
clean:
rm -f work work.o main.o
install:
cp work /usr/local/bin/work
uninstall:
rm -f /usr/local/bin/work
Результати виконання
super@ubuntu:~/Завантаження/lab6$ ls
lab.h main.c Makefile work.c
super@ubuntu:~/Завантаження/lab6$ make
cc -c -o work.o work.c
work.c: In function ‘lab’:
work.c:15:5: warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration]
close(fd1);
pclose
gcc -c main.c
gcc work.o main.o -o startLab6 –lm
super@ubuntu:~/Завантаження/lab6$ ./startLab6
super@ubuntu:~/Завантаження/lab6$ ls
lab.h level1 main.c main.o Makefile startLab6 work.c work.o
super@ubuntu:~/Завантаження/lab6$ cd level1/
super@ubuntu:~/Завантаження/lab6/level1$ ls
a.txt b.txt
super@ubuntu:~/Завантаження/lab6/level1$
Висновки
На цій лабораторній роботі я оволодів практичними навиками роботи з компілятором GCC та системними викликами в операційній системі GNU/Linux,
ознайомився із механізмом виконання системних викликів, процесом компіляції та побудови виконавчих файлів в цій ОС, шляхом виконання тестового завдання відповідно до варіанту. Тестове завдання було виконано успішно, тексти програм та результати з терміналу подано у звіті.