Proszę napisać program realizujący elektroniczny indeks studenta (EIS)
o funkcjonalności podobnej do wersji skryptowej z poprzedniego zadania.
Uwzględnij następujące modyfikacje w porównaniu z poprzednią wersją:
- Program powinien realizować jedynie wersję wsadową, bez
interakcji z użytkownikiem.
- Wyszukiwanie zaliczenia dla danego przedmiotu powinno być
zrealizowane w dwóch wariantach:
- jak w wersji skryptowej, przez podanie identyfikatora kursu i
numeru studenta; wtedy wynikiem wyszukiwania będzie pojedyncze
zaliczenie bądź jego brak,
- przez podanie pełnej nazwy kursu, oraz imienia i nazwiska studenta,
uwzględnieniem wyrażeń regularnych (biblioteka regcomp);
wtedy wynikiem wyszukiwania będzie zero lub więcej zaliczeń
pasujących do wzorców; należy również uwzględnić możliwość, że nazwy
kursu bądź nazwiska studenta nie podano, wtedy zaliczeń wyszukiwać
należy dla wszystkich studentów i/lub we wszystkich kursach.
- Program powinien być napisany modularnie, z rozdzieleniem
operacji na plikach od modułu głównego, którego zadaniem będzie
teraz jedynie parsowanie argumentów wywołania, wywołanie
odpowiedniej funkcji przetwarzania plików, i wyświetlenie
na wyjściu otrzymanych wyników.
- Proszę napisać plik Makefile do kompilacji programu. Uwzględnij
rozdzielenie kompilacji od linkowania, jednak nie wpisuj reguł,
które make ma wbudowane. Użyj makr CC, CFLAGS, LDFLAGS.
-
Program powinien być wielostanowiskowy, tzn. działać poprawnie gdy
uruchomionych jest jednocześnie wiele jego wersji. W tym celu należy
zastosować blokady plików zakładane na czas wykonywania powyższych
operacji. Proszę rozróżnić blokady zapisu i odczytu stosownie do
wykonywanej operacji.
Dodatkowo, należy zbudować mały zestaw testów programu wprowadzających
do indeksu określone oceny, jak również je modyfikujących i usuwających,
oraz następnie wyszukujących i sprawdzających otrzymane wyniki (na
tyle na ile da się to zrobić automatycznie).
Po uruchomieniu programu zgodnie z powyższymi wymaganiami, proszę
zbudować drugą wersję, z modułem operacji plikowych zamienionym na
bibliotekę. W podstawowym wariancie powinna to być biblioteka
statyczna (.a). Opcjonalnie, spróbuj zbudować bibliotekę dynamiczną (.so).
Budowanie biblioteki powinno być uwzględnione w Makefile. Jeśli to
konieczne, zbuduj oddzielny Makefile dla systemów Solaris i innych.
Uwaga:
Po zaprogramowaniu blokad, należy przetestować poprawność pracy
wielostanowiskowej. Nie wystarczy, że program wydaje się działać
poprawnie. Należy upewnić się, że blokady działają. Pytanie jak to
zrobić, jeżeli blokady są napisane w sposób drobnoziarnisty i
zakładane są na bardzo krótkie okresy czasu (tak jak powinny być).
Jednym sposobem jest tymczasowe sztuczne wydłużenie czasu przebywania
programu w sekcji blokady (sleep).