Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра БІТ
/
З В І Т
до лабораторної роботи №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; ознайомився із механізмом виконання системних викликів, процесом компіляції та побудови виконавчих файлів в цій ОС.