Git Product home page Git Product logo

lk-project's Introduction

Bartłomiej Długosz – jądro systemu na przykładzie LINUX

WPROWADZENIE:

Poniższe zadanie składa się z dwóch części – w pierwszej należy napisać program, który będzie działał podobnie jak polecenie bashowe find. W drugiej części należy zapisać wynik wyszukiwania do pliku, a także zmienić jego prawa dostępu.

Cała trudność zadania polega na tym, że wszystko należy wykonać z poziomu programu, przy użyciu odpowiednich wywołań systemowych (system calls) oraz znalezieniu odpowiednich plików nagłówkowych.

Co do kwestii teoretycznej dotyczącej wywołań systemowych odsyłam do wideoprezentacji umieszczonej na dole – temat 6.

WYMAGANIA:

Docker lub gcc

PRZYGOTOWANIE:

a) Ściągnij repozytorium:

./run_dlugosz_bartlomiej.sh clone

b) Jeśli posiadasz gcc i chcesz pisać rozwiązanie na własnym komputerze, to pomiń ten podpunkt. Skrypt, który uruchamia środowisko (obraz dockera - zainstalowany gcc oraz nano):

./run_dlugosz_bartlomiej.sh run

Jeżeli występują jakiekolwiek errory (permission denied):

sudo groupadd docker
sudo usermod -aG docker $USER
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "/home/$USER/.docker" -R
newgrp docker

Teraz ponownie uruchom skrypt:

./run_dlugosz_bartlomiej.sh run

ZADANIE DO WYKONANIA

CEL ZADANIA:

Wykorzystanie w praktyce wywołań systemowych do manipulowania plikami z poziomu programu - komunikacja pomiędzy jądrem systemu a programem.

TREŚĆ ZADANIA:

a) część pierwsza

Napisz program w języku C, który znajdzie i wypisze na standardowe wyjście wszystkie pliki oraz katalogi, które w swojej nazwie zawierają dany ciąg znaków (zadany jako argument wywołania programu). Wyniki powinny być wypisane z widocznymi wcięciami, aby zaznaczyć ścieżkę, w której się znajdują, a katalogi oznaczone: [to_jest_katalog]. Kompilować do pliku wykonywalnego o nazwie 'my_find'.

WSKAZÓWKA: pomocne będzie przestudiowanie manuala m.in. opendir, readdir, string.

b) część druga

(1) tym razem wynik z konsoli zapisz w buforze (zakładamy, że rozmiar nie przekroczy 1000 znaków).
(2) następnie z poziomu programu stwórz plik o nazwie „result.txt”, który będzie miał następujące prawa dostępu: grupa oraz inni będą mieli prawo do odczytu, natomiast użytkownik ma posiadać prawa do odczytu oraz zapisu.
Uwaga: zabronione jest użycie funkcji:

int open(const char *pathname, int flags, mode_t mode);  
int open(const char *pathname, int flags);

Użyj odpowiedniego system calla, aby pozyskać informację na temat uprawnień do jego dostępu, które wypiszesz na konsolę.
(3) teraz, przy użyciu system calla zmień prawa dostepu do pliku „result.txt” na 707. Ponownie wypisz jego prawa dostępu na konsolę.
(4) następnie przywróć plik „result.txt” do praw dostępu z punktu 2), używając drugiego sposobu na zmianę a następnie wypisz tę informację na konsolę.
(5) na koniec należy zamknąć plik, który otworzyliśmy oraz zwolnić wszelką zaalokowaną pamięć.

Na koniec

Aby wyczyścić to, co zostało ściągnięte przez skrypt 'clone' należy użyć flagi 'clean'.

./run_dlugosz_bartlomiej.sh clean

Link do wideoprezentacji:
https://www.youtube.com/watch?v=9qwW-VgKIz0

Materiały:
http://linasm.sourceforge.net/docs/syscalls/index.php
https://stackoverflow.com/questions

lk-project's People

Contributors

4jer avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.