Skocz do zawartości

[bash Awk] Program


qba_wl

Rekomendowane odpowiedzi

Witam. Potrzebuje pomocy z napisaniem pewnego programu. Problem jest taki że jestem dopiero początkującym i nie wiem jak w ogóle zabrać się za napisanie takiego projektu. Czy byłby ktoś w stanie dać chociaż jakieś rady bądź wskazówki pomocne w napisaniu takiego programu? Potrzebuje chociaż jakiś zarys jak to powinno wyglądać. Mniej więcej wiem jak zrobić wyszukiwanie ocen podmienianie itp. Ale kompletnie nie mam pomysłu jak się zabrać za ogół programu. Z góry dziękuje za jakąkolwiek pomoc. Jeżeli znajdzie się jakiś pomocny człowiek który potrafiłby napisać takie coś to też byłbym bardzo wdzięczny (nie chodzi mi o całość bo wiadomo że to zabrałoby zbyt dużo czasu).

 

Oto program:

 

Rozproszona lista ocen zorganizowana jest następująco: istnieje główna lista zawierająca dane o wszystkich uczestnikach pewnego przedmiotu i ich oceny, oraz każdy z prowadzących posiada listy własnych grup, które modyfikuje wystawiając oceny. Lista główna jest na żądanie prowadzącego aktualizowana: zawartość jego listy zostaje dołączona do listy głównej. Listy grup dla nauczyciela można wygenerować na żądanie (typowo: na początku semestru), powinno przy tym istnieć zabezpieczenie przed nadpisaniem istniejącej listy i usunięciem z niej ocen. Dodatkowo istnieje możliwość wygenerowania z listy głównej jej podsumowania zawierającego listę studentów wraz z pojedynczą oceną, która jest średnią z wszystkich wystawionych im ocen (średnia ocena danego studenta).

 

Lista główna jest plikiem tekstowym zawierającym dla każdego studenta następujące informacje:

 

imię i nazwisko studenta,

nr albumu,

identyfikator grupy zajęciowej,

identyfikator prowadzącego grupę zajęciową,

listę ocen wystawionych przez prowadzącego.

Lista prowadzącego jest plikiem tekstowym zawierającym dla każdego studenta należącego do danej grupy zajęciowej następujące informacje:

 

imię i nazwisko studenta,

nr albumu,

listę ocen.

Napisać programy zarządzające rozproszoną listą ocen. Pierwszy z programów pełniący rolę serwera zostaje uruchomiony jako daemon i jako jedyny posiada prawa do odczytu i modyfikacji listy głównej. Program pełniący rolę klienta uruchamiany jest przez prowadzących, jeśli chcą zaktualizować listę główną. Klient przyjmuje jako parametry nazwy plików list prowadzącego, traktując ich

nazwy jako identyfikatory grup zajęciowych. Po uruchomieniu klient wydaje serwerowi polecenia do wykonania, oczekuje na odpowiedź i wyświetla ją. W przypadku uruchomienia klienta bez parametrów oczekiwanym rezultatem jest podsumowanie listy głównej zawierające średnie oceny poszczególnych studentów. Miejscami spotkań mogą być pliki - należy zaproponować ich format.

 

Uwaga: Nie należy zakładać, że każdy student będzie posiadał taką samą, ustaloną z góry liczbę ocen - średnią należy liczyć z ocen, które faktycznie się na liście głównej znajdują.

Odnośnik do komentarza
Udostępnij na innych stronach

Oh jak ładnie opisałeś swoją pracę domową. Szkoda tylko, że brak jakiegokolwiek wkładu własnego.

bash/awk to wymóg czy takie tylko znasz?

* kurs bash - na początek

* artykuły o bash/awk/sed - dokumentacja gentoo

Zacznij od rozplanowania sobie jak będą przechowywane dane. Powinien wystarczyć katalog z kilkoma plikami tekstowymi, imitujący bazę danych.

Pokaż jakiś wkład własny to zobaczymy z czym jest problem.

Odnośnik do komentarza
Udostępnij na innych stronach

Co do basha i awk to taki jest wymóg... Jestem właśnie w trakcie pisania programu. Mam już koncepcje mniej więcej jak to zrobić tylko najbardziej martwi mnie jeszcze ten deamon. Zupełnie nie wiem jak to zrobić. Postaram się w najbliższym czasie napisać swoje 'wypociny' i wtedy może w jakiś sposób uda się coś wskórać. W sumie może trochę przesadziłem z tym gotowcem. Sorka za to.

Odnośnik do komentarza
Udostępnij na innych stronach

Demon to po prostu funkcja chodząca w kółko z jakimś opóźnieniem (sleep 0.5).

Przykład client-serwer w bash, komunikacja przez fifo:

* Using Named Pipes (FIFOs) with Bash

* podobno można nawet zrobić komunikację przez sieć za pomocą nc (netcat)

Lokalizacja co ma jaki PID:

* pid skryptu $$

* pid procesu, który właśnie uruchomiliśmy w tle $! ( czyli: funkcja_abc & )

* z poziomu funkcji_abc można uzyskać pid skryptu, który ją "porzucił" $PPID

 

---- łączenie postów ----

Przykład klient-serwer z przerwaniami "trap"

* trap_client.sh

* trap_server.sh

 

teraz pozostaje wymyślić, jak obsłużyć kolejkę z kilkoma klientami :)

Edytowane przez borzole
@borzole nie spodziewałem się, że nie znajdziesz przycisku [EDYTUJ] :P
Odnośnik do komentarza
Udostępnij na innych stronach

bash:

Bash socket programming with /dev/tcp

awk:

Network Administration with AWK

Networking With gawk

A Web Server in Awk

i jeszcze

nc (netcat), socat (netcat++)

Web server oneliner with bash

A web server in a shell script

 

@moderator

A dlaczego mam łączyć post, skoro wnosi coś nowego do tematu? Bez nowego postu nie ma wysyłanego powiadomienia do subskrybentów i nikt nie wie o zmianie w wątku.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...