Materiały do zajęć Programowanie w języku C

Materiały zewnętrzne

Dokumentacja języka C Standard Języka C

Notatki z zajęć i zadania

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

Projekt zaliczeniowy (termin 2025-06-23)

Uproszczona implementacja systemu kompilacji projektu redo.

Wymagania

  1. Polecenia redo i redo-ifchange obsługuje jeden plik wykonywalny - w zależności od nazwy programu wykonujący różne akcje
  2. Polecenie redo <cel> uruchamia skrypt <cel>.do poprzez domyślny shell (sh), przekazując jako argumenty do skryptu <cel>.do kolejno:
    1. <cel> - nazwa pliku wynikowego
    2. <cel> bez rozszerzenia (jeśli takie było)
    3. nazwę pliku tymczasowego będącego plikiem wynikowym skryptu (np. <cel>---redoing) - nazywane dalej tymczasowym plikiem wynikowym.
  3. Shell uruchomiony jest w trybie kończącym działanie po napotkaniu polecenia zakończonego błędem (parametr -e programu sh).
  4. Standardowe wyjście uruchomionego skryptu przekierowane jest do tymczasowego pliku wynikowego.
  5. Jeśli skrypt zakończy się pomyślnie, plik tymczasowy wynikowy atomicznie staje się plikiem wynikowym (rename(2)). W przypadku niepowodzenia skryptu plik tymczasowy wynikowy jest usuwany (unlink(2))
  6. Polecenie 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ę.
  7. Aktualność pliku jest wyznaczana na podstawie:
    • Wariant A) Czasu modyfikacji pliku: plik jest aktualny jeśli jego czas modyfikacji jest nowszy niż czas modyfikacji jego źródeł
    • Wariant B) Wyników funkcji skrótu zapisanych w pliku .redo (i potencjalnie dodatkowych metadanych jak rozmiar pliku). Osoba studencka może zaproponować własny system.
  8. Jeśli plik wynikowy nie istnieje to redo-ifchange powinno automatycznie uznać, że jest nieaktualny

Punktacja

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

  1. (5pkt) Implementacja polecenia redo
  2. (4pkt) Implementacja polecenia redo-ifchange
  3. (1pkt) Uruchomiony skrypt przez redo ma automatycznie rozszerzoną zmienną środowiskową PATH, tak by mógł uruchomić redo-ifchange bez bezpośredniego wskazywania ścieżki
  4. (1pkt) Wykorzystno funkcje fork/exec, a nie np. system do uruchomienia skryptu
  5. (3pkt) Mechanizm określający potrzebę przebudowy celu wykorzystuje funkcje hashujące oraz bazę hashy w pliku .redo lub autorski system rozwiązywania aktualizacji

Porady

Źródła

Zasady zaliczenia

  1. Dostępne 3 niedostępności nieusprawiedliwione
  2. Tydzień na przyniesienie usprawiedliwienia
  3. Minimalnie 8 obecności
  4. Zbiór zajęć per każde zajęcia; wykonanie zbioru zajęć daje 1 punkt w terminie (0.5 po terminie). Punkty za zadania stanowią 50% punktów.
  5. Projekt (pozostałe 50% punktów; 25% punktów po terminie).