Zamykani pres flock()

Honza Pazdziora adelton na fi.muni.cz
Čtvrtek Červen 11 14:30:17 CEST 2009


On Fri, Jun 05, 2009 at 12:07:56AM +0200, Jan Kasprzak wrote:
> 
> Vynecham dalsi slepe cesty a napisu happy end: nakonec pomohlo
> nahradit $fh->print() za syswrite($fh, ...). Ale fakt nechapu proc
> to pomohlo, kdyz flock by prece mel zajistit, ze do souboru nebude
> po tu dobu zapisovat nikdo jiny (pokud ten jiny si taky zkusi zavolat
> flock, coz jsem delal).

A neni to tak, ze ten print ten zapis bufferoval, takze z hlediska
systemu tam nikdy ta chybejici data nebyla a drzel si je Perl? Kdyz
si pustis strace, tak predpokladam uvidis, ze se tam zapisovalo
16 bajtu, ne 20, mozna proto, ze ten 16 vyslo na zlom bufferu nebo
neceho.

> Overoval jsem si, ze fakt zapisuju blok velikosti delitelne dvaceti.
> Dokonce jsem za flock() dopsal seek na konec a pres tell jsem zjistoval
> jestli soubor ma velikost delitelno dvaceti: stavalo se ze nemel. Coz
> znamena, ze i uvnitr flock() byly videt "castecne zapisy", nebo ze
> flush() nedela co ma. Nevim.

Spis bych rekl, ze print nedela, co od neho ocekavas.

Kdyz bys na ty filehandly udelal ->autoflush() tak to taky nefunguje?

-- 
--------------------------------------------------------------------------
  Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Satellite, Spacewalk | Only self-confident people can be simple.


Další informace o konferenci Perl