Uz pri zbeznem prehlednuti jsem se ponekud zarazil, kdyz autor v resumé annoncoval praci s docasnymi soubory, a na konci ji odlozil na priste. Pokud by se pouze zmylil v nastinu dalsiho dilu, bylo by to samozrejme pochopitelne, ovsem clanek samotny se obvykle pise jako celek, a textovy editor autora jiste umozne pohyb v textu souboru.
Priznam se, ze oddil o getopt_long() jsem prilis pozorne necetl, zdrzim se tedy komentaru. Ale zato popis promnenych prostredi je natolik strucny, ze sel preletnout velmi snadno, a to je take jeho hlavni problem.
Myslim, ze je pomerne zasadni popsat zacinajicim programatorum, jak se vlastne environment v UNIXu dedi apod., nebo se jako mnozi pred nimi budou divit, proc se v shellu neupdatuji hodnoty promnenych, ktere meni. Kdyz uz take autor popsal setenv() a unsetenv(), stalo by snad za uvahu je zakomponovat do onoho pomerne kratkeho prikladu, treba misto tech vyteckovanych radku (nebo to znamena, ze je odstranila redakcni cenzura? ;-)).
Co se tyce setenv() a unsetenv()... je sice pravda, ze autor pise clanky o programovani _pod Linuxem_, nicmene by jiste stalo za uvahu rovnou ucit programatory psat i kod portabilni (pokud to samozrejme ma smysl). Proto by se jiste sluselo alespon velmi strucne (i kdyz to s ohledem k tomuto clanku znamena stejne strucne, jako k ostatnim funkcim) zminit o funkci putenv() a o tom, ze narozdil od *setenv() se sice pouziva priserne, ale zato ji mame garantovanou na kazdem POSIXovem systemu, a nikoliv pouze na BSD derivatives.
Treba by neuskodilo si na zacatku dalsiho pokracovani zkusit popis promnenych prostredi zopakovat znovu a poradne... vzdyt je to preci skoda. A muzeme se rovnou zminit o tretim parametru main()u, ci take hojneji pouzivat odkazy na rozsirujici zdroje (rozumnej manualove stranky), napriklad environ(5).
Ach jo, kdybych misto kritik psal radeji clanky, za ty me alespon nekdo plati ;-).
To ze kazdej bezici proces ma svoji kopii environmentu je zakladni informace. A jediny komu to bude zpusobovat problemy sou prave zacatecnici, imho by to mela byt prvni veta ktera o env mluvi - ne ze kazdy program ma prirazeno jiste prostredi, ale to ze kazdy proces ma svoji kopii. Ted me zarazila dalsi vec, autor mluvi o procesech ale rika jim programy, nekonzistence v nazvech zacatecniky mate jeste vic. Z toho co autor napsal to vypada ze kdyz pustim ctyrikrat jeden a ten samej program tak budou mit jedno konkretni prostredi...
když se tak zamyslím nad články a komentáři v poslední době, mám takový pocit, že by zde spíš místo jednotlivých autorů měly vystupovat týmy: někdo méně pokročilý to napíše, ostatní mu to zdrbou, aby se to opravilo v souladu se všemi pravidly bezpečnosti, portability a pravopisu ;-) po opravě jim to zdrbe on, že to BFU nepochopí a zlidští to, guru opět opraví chyby ... a po několika takových cyklech máme dokonalý článek :-)
no nic, nechme snění a buďme rádi aspoň za to, co máme... děkuji všem autorům i jejich kritikům!
Ja tuto funkci vubec nepouzivam a to ze 2 duvodu, je neportabilni (zbezna zkouska pod SUNem nebo BSD to odhali) a znacne omezuje tvar a pouziti parametru. Mozna by stalo za to udelat par poznamek kvuli porabilite a predevsim ze zacatku se omezit spise na dobre prenositelne funkce zvlast kdyz getopt je POSIX korektni a getopt_long ne.
Nazdar.
Sam jiz nejakou dobu programuji pod linuxem, ale o tehle funkci (getopt) jsem nevedel. Dekuji tedy autorovi, za jeji popsani. Me diky patri ale take vsem krtikum, protoze jsem mel v umyslu tuto funkci pouzit (na zaklade prezentace v clanku). Jelikoz ale muj program by mel bezet i pod systemy Solaris, jevi se jeji pouziti jaksi problematicke.
Cau, Bernos
Neportabilni je (mozna, nevim) getopt_long(), naopak getopt() je portabilni a POSIXova. Ale obyc. getopt() neumi dluhe prepinace, zvladne -p, ale uz ne --print, to me osobne ale nevadi. Zrovna vcera jsem na Solarisu8 kompiloval pod gcc2.95 svuj (na Linuxu vyvinuty) program, zadny problem, getopt() jede jak vino.
getopt_long je zrovna ten typ funkce, o ktere by mel zacatecnik slyset co nejpozdeji. Funkcim s vedlejsimi efekty (pouziva statickou enumeracni promenou) se kazdy moderni programator obloukem vyhne. Takhle se programovalo v minulem stoleti !
Navic takova strojovna pro tak jednoduchou akci jako je parsing parametru ? Citim za tim ducha tech, co zplodili X server. A to je moc smutna kapitola. Uvidime jestli se k tomu autor v nekterem dilu dostane.