davkovy soubor

vpospichal na centrum.cz vpospichal na centrum.cz
Sobota Prosinec 2 14:16:43 CET 2000


> >> -> Spise se diky vyrovnavacim pametem jadra a zahadnym kopirovanim deskriptoru
> >> -> shellem stanete svedky "pseudonepredvidatelneho" chovani, ale take se
> >> -> mozna nestane nic, tedy bude se interpretovat puvodni soubor.:-)
> >> skor kvoli vyrovnavacim pamatiam libc... vyrovnavacie pamate jadra by mali
> >> byt pre ten isty subor totozne nie?
> > No, souborove proudy libc neovlivni vyrovnavaci pameti blokobych zarizeni
> > v jadre. Takze pokud jadro nacte dopredu jeden blok, libc to pravdepodobne
> > neovlivni.
> Tedy, abych to upresnil. Mate pravdu v tom, ze by se pravdepodobne melo 
> zapisovat do stejneho bufferu z jakeho se cte i v pripade kopirovani
> deskriptoru a libc by pri normalnim otevreni souboru a v pripade neuziti
> setvbuf, ktereho jsem si nevsiml, mela pouzit fully buffered stream tedy
> vyrovnavaci pamet bloku neurcite velikosti. Jestli je tato pamet
> synchronizovana i v pripade zapisu jinym procesem to Vam nepovim.
> Jiste je jen to, ze cim vice vrstev vyrovnavacich pameti tim vetsi
> pravdepodobnost interpretace puvodniho souboru.

Udelal jsem par testu na 3MB davkovem souboru a zde jsou vysledky:
Pokud radek jeste nebyl cten a nejaky program ho zmeni, zmena se 
projevi. Pokud uz cten byl, zmena se neprojevi. Dale jsem zjistil, ze bash 
se nafouknul na 20MB. Swap se mohl zblaznit (mam jen 16MB RAM)

Zaver je jednoduchy: Vyrovnavaci pameti na cinnost bash nemaji zadny 
vliv a bash cte kazdy radek jen jednou znak po znaku. Obsah cyklu si 
predem nacte cely do pameti a pak teprve provadi. Neni problem 
modifikovat dosud neprovedenou cast programu nebo pridavat na konec 
davkoveho souboru dalsi prikazy nebo i cykly. Diky tomu muze bash cist 
prikazy napr z roury nebo muzete psat dlouhe cykly primo z klavesnice.

Jeste bych rad dodal: Psani samomodifikujicich programu je znacne 
riskantni zalezitost a pouzivalo se v dobe, kdy bylo nutne setrit kazdy byte 
pameti. Pokud chcete dynamicky generovat skript, pouzijte radeji rouru 
(treba i pojmenovanou) do nove instance bashe. Budete tak moci 
modifikovat program i uvnitr cyklu.

S pozdravem


Ing. Vlastimil Pospichal
mailto:vpospichal na centrum.cz
http://www.hoteldrnholec.cz
http://pospichal.hyperlink.cz


Další informace o konferenci Linux