Systemy operacyjneProjekt pierwszy – przykładowe tematyProgramowanie z wykorzystaniem API systemów Uniksowych |
1. Prosty interpreter poleceń [10p] Zaprojektuj i zaimplementuj prosty interpreter poleceń. Interpreter pobiera ze standardowego wejścia pojedynczy wiersz. Nastepnie dokonuje prostej analizy wiersza dzieląc go na słowa separowane spacjami. Pierwsze słowo jest nazwą programu który należy uruchomić (wykorzystując zmienną PATH), a pozostałe są argumentami. Shell uruchamia program i standardowo czeka na zakończenie jego pracy, chyba że ostatnim słowem jest znak & co powoduje uruchomienie programu w tle, jak w normalnym shellu bash. Shell kończy pracę gdy otrzyma znak końca pliku. Dzięki temu mozliwe jest przygotowanie prostych skryptów, które można uruchamiać z wiersza poleceń bash-a, jeżeli pierwsza linia skryptu ma postać #!/home/student/moj_shell (gdzie po ! podaje się scieżkę do programu shella). Dodatkowe opcje to:
a) [6p] możliwość przekierowania standardowego wyjścia polecenia przy pomocy >> c) [9p] historia poleceń – shell przechowuje (w zewnętrznym pliku w katalogu domowym użytkownika – tak że historia powinna „przetrwać” zakończenie shella) dokładną treść 20 poleceń, a wysłanie sygnału SIGBRK powoduje wyświetlenie historii na standardowym wyjściu – uwaga na niuanse związane z obsługą sygnałów !!! Uwaga: Jako minimum, oprócz części podstawowej, projekt powinien mieć zrealizowany jeden z punktów a)-c) |
2. [12p] Demon synchronizujący dwa podkatalogi: Program który otrzymuje co najmniej dwa argumenty: scieżkę źródłową scieżkę docelową . Jeżeli któraś ze ścieżek nie jest katalogiem program powraca natychmiast z komunikatem błędu. W przeciwnym wypadku staje się demonem. Demon wykonuje następujęce czynności: śpi przez pięć minut (czas spania można zmieniać przy pomocy dodatkowego opcjonalnego argumentu), po czym po obudzeniu się porównuje katalog źródłowy z katalogiem docelowym. Pozycje które nie są zwykłymi plikami są ignorowane (np. katalogi i dowiązania symboliczne). Jeżeli demon (a) napotka na nowy plik w katalogu źródłowym, i tego pliku brak w katalogu docelowym lub (b) plik w katalogu docelowym ma późniejszą datę ostatniej modyfikacji demon wykonuje kopię pliku z katalogu źródłowego do katalogu docelowego – ustawiając w katalogu docelowym datę modyfikacji tak aby przy kolenym obudzeniu nie trzeba było wykonać kopii (chyba ze plik w katalogu źródłowym zostanie ponownie zmieniony). Jeżeli zaś odnajdzie plik w katalogu docelowym, którego nie ma w katalogu źródłowym to usuwa ten plik z katalogu docelowego. Możliwe jest również natychmiastowe obudzenie się demona poprzez wysłanie mu sygnału SIGUSR1. Wyczerpująca informacja o każdej akcji typu uśpienie/obudzenie się demona (naturalne lub w wyniku sygnału), wykonanie kopii lub usunięcie pliku jest przesłana do logu systemowego. Informacja ta powinna zawierać aktualną datę.
a) [10p.] Dodatkowa opcja -R pozwalająca na rekurencyjną synchronizację katalogów (teraz pozycje będące katalogami nie są ignorowane). W szczególności jeżeli demon stwierdzi w katalogu docelowym podkatalog którego brak w katalogu źródłowym powinien usunąć go wraz z zawartością. Uwagi: (a) Wszelkie operacje na plikach należy wykonywać przy pomocy API Linuksa a nie standardowej biblioteki języka C (b) kopiowanie za każdym obudzeniem całego drzewa katalgów zostanie potraktowane jako poważny błąd (c) podobnie jak przezucenie części zadań na shell systemowy (funkcja system). |
Uwagi: <>1.) Projekty pisane są w grupach dwuosobowych. a) Dane wykonawców i prowadzącego + treść zadania, c) Opis najistotniejszych algorytmów 3.) Kary: za beznadziejny styl programowania max: -5p. za niekompletność punktów c) d) dokumentacji -4p. Na ostateczną liczbę punktów bardzo duży wpływ będzie miała rozmowa, która zostanie w późniejszym terminie przeprowadzona z zespołem realizującym projekt. |
Opracował: Wojciech Kwedlo |