Předpokládáme, že máte základní znalosti jazyka C a jak funguje překlad ze zdrojových kódů jazyka C do binární spustitelné aplikace (v obecném případě kdy je zdrojových souborů více).
Dále byste měli mít alespoň minimální povědomí o použití překladače gcc a jeho základních parametrech (gcc).
Nastudujte si použití nástroje make pro překlad programu v jazyku C/C++: make
Dále je pro absolvování cvičení nutné mít přehled o systémových voláních fork, pipe, dup, open, kill, wait a exec, tzn. měli byste vědět jak vzniká nový proces a jak lze přesměrovat standardní vstup a výstup. Potřebné informace se dozvíte na některé z předchozích přednášek.
Vytvořte v jazyce C (nebo C++) program forkpipe
, který:
fork
. Prvně vytvořený proces budeme níže nazývat GEN, druhý NSD.
pipe
a dup2
) tak, aby standardní výstup GEN byl napojen na standardní vstup NSD.
sleep(5)
.
SIGTERM
, který způsobí ukončení obou potomků.
wait
).
rand()
(např. printf(“%d %d\n”, rand(), rand())
).
sleep(1)
.
execl
, aby začal vykonávat program nsd
(viz níže).
Vytvořte Makefile
, který:
make
bez parametrů zkompiluje váš program forkpipe
a program nsd
pro výpočet největšího společného dělitele, jehož zdrojové kódy si stáhněte z nsd.tgz. Obě binárky program umístí do stejného adresáře jako soubor Makefile
.
make
překompiluje pouze soubory, které jsou z daného souboru generovány (ať přímo či nepřímo). Ostatní generované soubory měněny nebudou.
-Wall
, která způsobí výpis užitečných varování.
man signal-safety
.
strace -f
. Vyzkoušejte také argumenty -e process
, -e file
, -e trace=dup2
, apod.
tar czf osy04.tgz Makefile *.[ch]
.
Zdrojové kódy aplikace nsd se skládají ze souborů nsd_main.c, nsd.c a nd.c a hlavičkových souborů nsd.h a nd.h. Jejich přeložením vytvoříte binární soubor 'nsd'.
Zdrojové soubory naleznete v archivu nsd.tgz
Pro další cvičení budete potřebovat vědět
Potřebné informace byste měli získat na přednáškách.