Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра БІТ
/
З В І Т
до лабораторної роботи №6
з дисципліни “Операційні системи”
на тему “Робота з компілятором G++ в ОС GNU/LINUX ”
Мета роботи – оволодіти практичними навиками роботи з компілятором G++ та системними викликами в операційній системі GNU/Linux; ознайомитись із механізмом виконання системних викликів, процесом компіляції та побудови виконавчих файлів в цій ОС.
Порядок виконання роботи
1. Створити три файли з кодом на мові С++. Два файли з вихідним кодом на мові С++, перший повинен містити процедури, що реалізують задане варіантом завдання, а другий функцію main (). Третій файл – заголовний (.h). Створити Make-файл, що міститиме правила для створення виконавчого файлу, а також правила clean, install і uninstall.
Результати виконання
Імплементація header файлу “task.h” - “task.cpp”
#include<stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <iostream>
#include <unistd.h>
#include <stdexcept>
#include "task.h"
#define BUF_SIZE 4096
#define OUTPUT_M0DE 0700
FilePerms::FilePerms(char* name)
{
if(!name)
{
throw std::invalid_argument( "File doesn't exists!" );
return;
}
this->name=name;
}
char * FilePerms::Task(){
struct stat st;
char *modeval = (char*)malloc(sizeof(char) * 9 + 1);
if(stat(name, &st) == 0){
mode_t perm = st.st_mode;
modeval[0] = (perm & S_IRUSR) ? 'r' : '-';
modeval[1] = (perm & S_IWUSR) ? 'w' : '-';
modeval[2] = (perm & S_IXUSR) ? 'x' : '-';
modeval[3] = (perm & S_IRGRP) ? 'r' : '-';
modeval[4] = (perm & S_IWGRP) ? 'w' : '-';
modeval[5] = (perm & S_IXGRP) ? 'x' : '-';
modeval[6] = (perm & S_IROTH) ? 'r' : '-';
modeval[7] = (perm & S_IWOTH) ? 'w' : '-';
modeval[8] = (perm & S_IXOTH) ? 'x' : '-';
modeval[9] = '\0';
return modeval;
}
else{
return strerror(errno);
}
}
char ans;
std::cout<<"\nWant to close permissions? y/n\n";
std::cin>>ans;
if(tolower(ans)=='y')
{
chmod(name, S_IRWXU);
std::cout<<"\nDone\n";
char* tmpshow = Task();
std::cout<<"\nNew file permissions: "<<tmpshow<<std::endl;
} else return;
}
Текст main.cpp:
#include <sys/stat.h>
#include <sys/types.h>
#include<stdio.h>
#include <iostream>
#include <cstring>
#include "task.h"
int main(void)
{
bool prog_works = true;
while(prog_works)
{
char* MainDir = new char[100];
char* ChildDir = new char[100];
std::cout<<"\n\n";
std::cout<<"File directory + name: \n";
std::cin>>MainDir;
FilePerms fp (MainDir);
char*t=fp.Task();
std::cout<<"\nFile permissions: ";
std::cout<<t;
std::cout<<std::endl;
fp.ChangePerms();
char ans;
std::cout<<"\nWant to run again? y/n\n";
std::cin>>ans;
if(tolower(ans)=='y')
{
std::cout<<"\nOkey, here we go again\n";
} else prog_works=false;
}
return 0;
}
Текст заголовного файлу:
#ifndef TASK_H_
#define TASK_H_
class FilePerms
{
public:
FilePerms(char* name);
char* Task();
void ChangePerms();
//void OpenCloseFile();
private:
char* name;
};
#endif
Текст Makefile:
result: task.o main.o
g++ task.o main.o -o result
task.o: task.cpp task.h
g++ -c task.cpp -lstdc++
main.o: main.cpp task.h
g++ -c main.cpp -lstdc++
clean:
rm -f result task.o main.o
install:
cp result /usr/local/bin/result
uninstall:
rm -f /usr/local/bin/result
Результати виконання
Висновок: на цій лабораторній роботі я оволодів практичними навиками роботи з компілятором GCC, G++ та системними викликами в операційній системі GNU/Linux; ознайомився із механізмом виконання системних викликів, процесом компіляції та побудови виконавчих файлів в цій ОС.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!