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 .