Salut, Andrei.<br><br>O sa incerc sa iti raspund la intrebari.<br><br>1) Daca vrei sa sincronizezi accesul la acelasi fisier studiaza sectiunea de advisory locking de la fcntl(2) sau alternativ, functia flock(2). Doar cu open fara O_CREAT nu cred ca se poate obtine acces exclusiv.
<br><br>2) In generic_file_write se face asta:<br> down(&inode->i_sem);<br> err = generic_file_write_nolock(file, &local_iov, 1, ppos);<br> up(&inode->i_sem);<br><br>Deci aici apare locking-ul. Nu o sa apara datele intretesute in fisier, ci in functie de ordinea operatiilor, o sa fie ori una ori alta cea care are ultimul cuvant pe portiunea comuna :). In exemplul din intrebare, daca 2 clienti incearca sa scrie la acelasi offset "abc" si "xyz" o sa ai ori "abc" ori "xyz" in final.
<br><br>Oricum, nu trebuie sa va preocupe prea mult chestiunea asta in contextul temei. Testele nu verifica asa ceva, deci puteti ignora cu succes aspectele astea :).<br><br>Cosmin.<br><br><br><div class="gmail_quote">On Dec 14, 2007 2:01 PM, Andrei Homescu <
<a href="mailto:ahomescu@gmail.com">ahomescu@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Salut!<br><br>Am niste intrebari legate de accesele la fisiere care se rezuma asa:
<br>ce se intampla daca mai multi clienti incearca sa scrie in acelasi<br>timp in acelasi fisier.<br>Intrebarile mele de fapt sunt:<br>1) Se poate deschide cu open() acelasi fisier de mai multe ori, chiar<br>si pentru scriere. Cum se poate impiedica a doua deschidere a unui
<br>fisier?<br>2) Am urmarit apelurile de functii si arata cam asa:<br>aio_write->pwrite->do_pwrite->pwrite64=>sys_pwrite64->vfs_write->generic_file_write.<br>Nicaieri in acest lant nu apare vreun lock, deci nu mi-e clar daca
<br>operatia de scriere e atomica. Ce se intampla daca 2 clienti incearca<br>sa scrie niste date la acelasi offset din fisier? De exemplu, sirurile<br>"abc" si "xyz" vor fi scrise intotdeauna "abcxyz" sau pot aparea
<br>intretesute?<br><br>A doua intrebare a venit de la Alex Suhan si acum stam amandoi cu<br>sufletul la gura dupa raspuns :D<br><font color="#888888"><br>Andrei Homescu<br>_______________________________________________<br>
so mailing list<br><a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>
</font></blockquote></div><br>