Zamykani pres flock()
Jan Kasprzak
kas na fi.muni.cz
Čtvrtek Červen 11 16:42:03 CEST 2009
Honza Pazdziora wrote:
: 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?
Ale vzdyt pisu ze jsem jednak delal explicitni flush pred odemcenim,
a jednak podle dokumentace perlovy flock() v sobe to flush zahrnuje:
flock FILEHANDLE,OPERATION
[...]
To avoid the possibility of miscoordination, Perl now flushes
FILEHANDLE before locking or unlocking it.
: 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.
No jasne, takhle nejak to bylo. Akorat me fakt zajima proc.
: > 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?
Tak predpokladam ze autoflush je totez co explicitni flush
za tim jedinym printem, ktery jsem do toho filehandlu v programu delal.
Nebo nerozumim co mas na mysli.
Co nefungovalo bylo
flock $fh, LOCK_EX;
print $fh $data;
flush $fh;
flock $fh, LOCK_UN;
Co fungovalo bylo
flock $fh, LOCK_EX;
syswrite $fh, $data;
flock $fh, LOCK_UN;
-Y.
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Journal: http://www.fi.muni.cz/~kas/blog/ |
>> If we wanted to trade simplicity and kewl design for usability I think <<
>> we all know the URL of the Apple Store. --jmorris42 @LWN <<
Další informace o konferenci Perl