Jak zapisovat do souboru?

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pondělí Červenec 19 16:22:10 CEST 1999


On Sun, 18 Jul 1999, Jan Kara wrote:

>   No ja tedy nevim, ale kdyz prochazim sys_write v fs/read_write.c, tak tam
> hned na zacatku vidim locks_verify_area(), ktera dela presne testy na ruzne
> locky od flocku. Ty locky stranek jsou zase uplne jina vec a tam je popsane
> chovani OK... Snad nejsem uplne vedle.

Jde prave o to, jak se to chova, kdyz se zamykani *neprovadi*. Mne z toho
vychazi, ze kdyz to budou mit dva otevreno s O_APPEND (a nebudou zamykat),
tak pri kolizi dvou volani write() muze dojit k tomu, ze jeden prepise to,
co tam napsal ten druhy, coz je ponekud v rozporu se smyslem O_APPEND
(kdyby to poradne fungovalo jen se zamykanim, tak O_APPEND vubec
nepotrebuju: staci pokazde bezprostredne po zamceni udelat
lseek(fd, 0, SEEK_END)).

Nazorne: proces A provede write("AAAAAAAAAAAA") a proces B provede
write("BBBBB") a vysledkem by mohlo byt (kdyby se potkali na
__find_lock_page()) treba BBBBBAAAAAAA.

(A druha vec je, ze pro zapisy prekracujici nekolik stranek by se
teoreticky mohly za spatneho pocasi mohlo menit poradi, ve kterem procesy 
zapis provadeji, takze by vysledek neodpovidal zadne serializaci tech
zapisu, coz take lze povazovat za ponekud patologicke chovani.)

Ale asi bude lepsi, kdyz risknu mezinarodni trapas, a poslu to do
linux-kernel. :)

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux