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ą:

  1. Program powinien realizować jedynie wersję wsadową, bez interakcji z użytkownikiem.

  2. Wyszukiwanie zaliczenia dla danego przedmiotu powinno być zrealizowane w dwóch wariantach:

  3. 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.

  4. 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.

  5. 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).