Ćwiczenie 1. Napisz program, aby proces macierzysty utworzył 2 procesy, każdy z nich utworzył kolejne dwa i te ostatnie powinny utworzyć kolejne dwa. Wszystkie procesy macierzyste mają czekać, aż skończą się ich procesy potomne. Ile powinno być wszystkich procesów?
Wykorzystaj funkcje systemową execl.
Temat 1: Obsługa wejścia wyjścia w języku C.
Ćwiczenie 2. Operacje IO w języku C. Napisz aplikację, która zrobi kopie dowolnego pliku. Zrób to na dwa sposoby:
UWAGA: patrz nowe zbiory nagłówkowe na dole strony.
Ćwiczenie 3. Napisz aplikację, która coś zrobi (np.: zrobi kopie dowolnego pliku), a następnie zakończy się. W momencie zakończenia aplikacja ma wykonać własnoręcznie napisaną funkcję, która ma za zadanie usunąć plik źródłowy. (atexit)
Ćwiczenie 4. Napisz aplikację, która po uruchomieniu zawiesza swoje działanie (funkcja pause), a następnie po wysłaniu do niej z konsoli sygnału SIGALRM aplikacja wyświetla pozdrowienie i kończy się. Wykorzystaj funkcje pause.
Ćwiczenie 5. Rozszerz aplikację z ćwiczenia 2 tak, aby były tworzone 2 procesy, macierzysty i potomny. Proces macierzysty wyświetla literkę A a proces potomny wyświetla literkę B. Problem w tym, że procesy te powinny wyświetlać te literki na zmainę tzn. ABABABAB i tak każdy 1000 razy. Rozpoczęcie wyświetlania powinno odbyć się po wysłaniu sygnału z konsoli tzn. po podaniu polecenia kill. Proces macierzysty ma być procesem drugoplanowym.
Pomoce funkcje pause, kill, signal.
Ćwiczenie 5. Zmodyfikuj tak program z zadania 4 aby aplikacja "sama sobie" wysłała sygnał po 2 sekundach i aby wtedy rozpoczęło się wyświetlanie ABABABAB. Pomoce funkcja alarm.
Ćwiczenie 6. Napisz aplikację, która utworzy hmm, powiedzmy 64 procesy. Podzieli je na dwie połowy (funkcja setpgrp).
Niech każdy proces wyświetli numer grupy do której należy. Następnie do jednego wybranego (dowolnego) procesu z każdej z grup wysyłamy sygnał, powiedzmy SIGALRM. Po wysłaniu tego sygnału wszystkie proces należące do tej grupy do której należał ten proces powinny zostać zabite (kill).
Pomocne zbiory nagłówkowe:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
UWAGA Nowe pożyteczne zbiory nagłówkowe:
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <signal.h>