Hlavní navigace

Pokročilé programování v operačním systému Linux

Lukáš Zapletal

Nakladatelství Softpress pro nás připravilo překlad knihy Advanced Linux Programming autorů M. Mitchella, J. Oldhama a A. Samuela, jež vyšla u New Riders Publishing. Máme pro vás recenzi.

Programovat v operačním systému UNIX v jazyce C/C++ není žádná věda. Učebnic tohoto jazyka je na trhu přehršel a architektura UNIX je díky Linuxu výborně dostupná a dokumentovaná. Proto mi kniha na první pohled nepřipadala zajímavá, jenže zdání klame a já jsem se pro ni nakonec do knihkupectví vrátil. Udělal jsem dobře.

V úvodu nás autoři seznámí s nástroji, které má UNIX standardně k dispozici. Je to především svatá trojice GCC, GNU Emacs a GNU Make. Tuto trojici doplňuje ještě GDB. Autoři nenásilně vysvětlují, co je to překladač, linker a jak vytvořit sestavovací soubor pro GNU Make. Jako třešničku na dort přidávají ještě základní editaci v editoru GNU Emacs.

Hned druhá kapitola se však zdá býti už i pro zdatnější jedince užitečnou. Shrnuje základní způsoby komunikace s okolím, zejména s příkazovým interpretem pomocí parametrů, návratové hodnoty a proměnné prostředí. Na konec kapitoly přidávají autoři ještě informace o knihovnách. Jak je správně používat (jak staticky, tak sdíleně), jak se vyhnout cyklickým vazbám či jaké jsou výhody a nevýhody sdílených knihoven.

Kapitola o procesech je velmi podrobná a dá se říci, že podrobněji to už je snad pouze v originální dokumentaci k Linuxu. Vytváření a ukončování procesů jsou stejně jako zasílání signálů tak důležité vlastnosti unixových operačních systémů, že by byla hanba to pominout.

Vlákna, tak se jmenuje čtvrtá kapitola, ve které jde podle mého názoru do tuhého. Vytváření a rušení vláken, synchronizace a uváznutí, to jsou témata, která by vydala na celou knihu. Autoři vše popisují na praktických příkladech, které jdou všechny přeložit a spustit, což se mi moc líbí.

Skvělá je také kapitola o komunikaci mezi procesy, protože jsou zde popsány všechny známé techniky. Sdílená paměť a semafory, roury, sockety a mapovaná paměť. Autoři ukazují také pokročilou techniku efektivního čtení z disku pomocí mapované paměti (mmap).

Šestá a sedmá kapitola se věnují zařízení v Linuxu a souborovému systému /proc. Rád bych upozornil, že kniha se v žádném případě nevěnuje programování ovladačů. Je kompletně zaměřena na uživatelské programování. A tak jsou koncipovány i tyto kapitoly. Čtenář se dozví, co se všechno z ovladačů zařízení a souborů proc může dozvědět a jak je správně používat.

Systémová volání Linuxu jsou skvělá věc, nejen pokud chcete optimalizovat váš kód. Některé věci bez nich prostě nejdou. Kniha se samozřejmě nemůže věnovat všem systémovým voláním (je jich ke dvěma stovkám), ale popisuje alespoň desítku nejdůležitějších z nich.

Devátá kapitola je lehkým úvodem do assembleru a věnuje se zejména inline assembleru překladače GCC. Ačkoliv je tato problematika poměrně složitá, je zde položen dobrý základ pro širší studium této látky. Minimálně se čtenář dozví, jak kód assembleru správně vkládat.

Předposlední kapitola se věnuje bezpečnosti. Jsou zde popsány základní techniky autentizace a autorizace uživatelů a k mému překvapení autoři přidali tři nejznámější bezpečnostní rizika při programování v jazycích C/C++ (překročení vyrovnávací paměti, souběh v odkládacím adresáři a nebezpečné volání funkce system).

Dílo je uzavřeno ukázkovou aplikací v jazyce C – jednoduchým webovým serverem s modulární architekturou pomocí sdílených modulů, který zprostředkovává základní informace o hostitelském systému. V dodatkové části pak nalezneme popis I/O funkcí, signálů, nezbytné odkazy a licence OPL a GPL v českém překladu.

Překlad je až na několik překlepů dobrý. Výpisy zdrojových kódů k mé spokojenosti přeloženy nebyly. Knihu bych doporučil všem, kteří programují nebo hodlají programovat na nízké úrovni v operačním systému Unix/Linux.

Mark Mitchell, Jeffrey Oldham, Alex Samuel
Pokročilé programování v operačním systému Linux
Překlad Miroslav Dressler
ISBN 80–86497–29–1
320 stran, Softpress, 2002

Našli jste v článku chybu?