zapis do jedneho suboru z viacerych procesov

Petr Šobáň soban na centrum.cz
Úterý Srpen 1 01:37:28 CEST 2000


Dne Po, 31 čec 2000 Petr Novotny napsal(a):
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>On 31 Jul 00, at 18:26, Igor Kilian wrote:
>
>> Ide mi o zapisovanie do jedneho suboru (co bude nieco ako
>> centralny log) z viacerych procesov na sebe nezavislych spustanych z
>> cronu. Ten zapis by nebol staly, ale iba z casu na cas jeden riadok.
>
>To by nemel byt problem.
>
>> Zaujimalo by ma co sa stane ked sucasne budu chciet zapisat dva
>> procesy do daneho suboru. Ked som skusal pokusny skript:
>> 
>> #!/bin/sh
>> while true
>> do
>> echo yes >> /tmp/log
>> done
>> 
>> spusteny na pozadi, a pocas toho som sa pokusal zapisat do daneho
>> suboru, tak vsetko bolo ok. Zapisal kazdy moj pokus.
>
>Zapisy kratsi nez nejaka magicka konstanta (512 bytu? 1024 bytu? 
>tak neco) se provedou atomicky - na to je nejaka garance.
>
>> Ked som vsak dal
>> na pozadie prikaz "yes >> /tmp/log" a pokusal sa zapisat do daneho
>> suboru nejaky retazec tak to neslo (nezapisal ani jeden, po minute som
>> ho killol {teda ten prikaz yes}).
>
>Protoze "yes" si /tmp/log otevrel pro zapis nejspis exkluzivne. 
>Nevim. Hadam. Kazdopadne jste rikal, ze vas program vypise par 
>radek a ne ze bude hucet do vystupu co se tam vejde (chovani yes: 
>je-li stdout zapisovatelny (select() na writability), neco tam tlac).
>
>> Blizsie ku skutocnosti co chcem je
>> ten prvy pripad, ale musim vediet urcite ci nejaky zapis nahodou
>> nestratim.
>
>Neztratite nic urcite. Akorat si mozna otevrete moc procesu a 
>vyplacate si file descriptory :-) Ja bych se toho nebal.
>

Podle me je hlavni problem v programu ktery pristupuje k souboru,
pokud otevru soubor pro zapis tak to muze udelat pouze jeden program a muzu tam
zapisovat, a pokud se ted pokusi otevrit pro zapis i druhy program tak se mu to
nepovede a ted zalezi jak se zachova, zda skonci nebo se za nejakou chvili
pokusi soubor znovu otevrit. 

Takze pokud si pisete program sam neni problem pockam a skusim soubor otevrit
pro zapis za chvili, a po zapisu ho zase zavru aby mohl pristoupit dalsi.







Další informace o konferenci Linux