| Notatka | Zadanie | Poruszone tematy |
|---|---|---|
| 01 | Zbiór 1 | Historia, bezpieczeństwo i wykorzystanie języka C. Podstawy języka: zmienne, funkcje, warunki, pętle, operatory. |
| 02 | Zbiór 2 | Biblioteki, preprocesor, kompilacja, linkowanie, pliki źródłowe, nagłówkowe, wykonywalne i obiekowe |
| 03 | Zbiór 3 | Wskaźniki, tablice statyczne, typy całkowitoliczbowe, zmiennoprzecinkowe i o stałej szerokości |
| 04 | Zbiór 4 | Wskaźniki 2, łańcuchy znaków, argumenty programu, tablice dynamiczne, alokacja pamięci |
| 05 | Zbiór 5 | Struktury, unie, wyliczenia i polimorfizm cz. 1 |
| 06 | Zbiór 6 | Struktury danych |
| 07 | Zbiór 7 | Alokacja pamięci, praktyczne aspekty programowania w C |
| 08 | Zbiór 8 | Typy wyliczeniowe, flagi bitowe, uprawnienia plików, chmod, stat |
| 09 | Zbiór 9 | Procesy, podprocesy, fork, wait, ścieżki |
| 10 | Zbiór 10 | Deskryptory plików, komunikacja międzyprocesowa (IPC), pamięć współdzielona, bufor cykliczny |
| 11 | Zbiór 11 | Wątki, muteksy, problemy współbieżności, biblioteka pthread |
| 12 | Zbiór 12 | Sygnały, typy atomowe, man, cppreference |
| 13 | Zbiór 13 | Integracja Python - C; mechanizm dynamicznego ładowania zależności; biblioteki statyczne vs dynamiczne |
| 14 | Zbiór 14 | Polimorfizm cz. 2 |
Program tworzony w ramach zajęć 4, 5, 6: magick.c
Uproszczona implementacja systemu kompilacji projektu redo.
redo i redo-ifchange obsługuje jeden plik wykonywalny - w zależności od nazwy programu wykonujący różne akcjeredo <cel> uruchamia skrypt <cel>.do poprzez domyślny shell (sh), przekazując jako argumenty do skryptu <cel>.do kolejno:
<cel> - nazwa pliku wynikowego<cel> bez rozszerzenia (jeśli takie było)<cel>---redoing) - nazywane dalej tymczasowym plikiem wynikowym.-e programu sh).redo-ifchange <źródła>..., wykorzystywane w ramach skryptu .do zwraca fałsz, jeśli cel jest aktualny w kontekście źródeł (przerywając tym samym wykonanie skryptu .do). W innym przypadku zwraca prawdę..redo (i potencjalnie dodatkowych metadanych jak rozmiar pliku).
Osoba studencka może zaproponować własny system.redo-ifchange powinno automatycznie uznać, że jest nieaktualnyWarunkiem otrzymania punktów jest dodanie kodu źródłowego do repozytorium Git oraz prezentacja projektu osobie prowadzącej na zajęciach / poinformowanie o wykonaniu projektu mailowo.
redo-ifchange bez bezpośredniego wskazywania ścieżki.redo lub autorski system rozwiązywania aktualizacjisetenv(3) jako zmienną środowiskową, np. setenv("REDO_TARGET", "foo") w redo, które później będzie odczytane w redo-ifchange: getenv("REDO_TARGET").close(STDOUT_FILENO) , a następnie otworzenie pliku open(...). Należy koniecznie pamiętać o uprawnieniach przekazywanych do funkcji open(2)!redo oraz redo-ifchange są w klasie programów, w której nie musimy dealokować każdej zaalokowanej pamięci - ich żywot jest raczej krótki..env nie zawiera rozszerzenia! Podobnie katalog .