|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
[c++] lock su file
Devo fare un programmino che va a lavorare su alcuni client(sia win che linux) in rete su file condivisi. Quello che occorre è che quando un' istanza del programma ha acquisito un file in scrittura gli altri ne possono acquisire solo la lettura...come avviene per office sostanzialmente.
Devo gestire il lock manualmente oppure il sistema lo fa aggratis..(non vorrei dire una cazzata ma mi pare di ricordare che windows acquisendo la scrittura attivi per gli altri la sola lettura)...su linux non so.. |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Linux da questo punto di vista è un po' un escremento: è possibile anche cancellare un file aperto da un processo o addirittura un programma in esecuzione. su Windows basta che regoli i parametri della CreateFile: per limitare i permessi di condivisione alla lettura specifica FILE_SHARE_READ, per impedire anche la lettura non specificare niente; comunque è sufficiente che eviti di specificare FILE_SHARE_WRITE e FILE_SHARE_DELETE.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
quini su linux, devo provvedere da me a proteggere gli accessi conocorrenti alla risorsa?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
direi proprio di si
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
se non si può non si può; è su Windows che devi provvedere tu (passando i flag giusti al terzo parametro della CreateFile), su Linux ti attacchi
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1270
|
su Linux ci sarebbe una sorta di mandatory locking:
http://enpc3240.eas.asu.edu/lxr/linu.../mandatory.txt |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
guarda se puoi usare le features descritte nel link postato da arara, che mi pare di capire che siano le analoghe di LockFile; non credo che questo sistema però impedisca la cancellazione. |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Avevo inizialmente pensato proprio ad un sistema protetto con monitor, ma come giustamente dicevi bisogna sbattersi molto per realizzarlo...Inoltre considera che le varie istanze del programma girerebbero su client diversi all' interno della rete lan...quindi credo che sarebbe in ogni caso impossibile sincronizzarli con dei semafori(almeno credo). |
|
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Ultima modifica di nuovoUtente86 : 08-06-2008 alle 19:06. |
|
|
|
|
|
|
#14 | |||||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
71104 continua a presumere...
Quote:
Un file non viene cancellato se lo "scolleghi", ma quando non ha più riferimenti (l'apertura di un file implica l'acquisizione di un riferimento; il nome sul file system è un "riferimento" come gli altri) Quote:
Quote:
![]() Quote:
Quote:
fuser riporta gli utilizzatori di un file, ma nel tuo caso sarebbe meglio usare i lock -- se non ricordo male samba emula i lock di windows con gli advisory lock di linux. Se il tuo problema è gestire i lock tra le macchine windows _e_ le macchine linux, dovresti fare così.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|||||
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
infatti il questito che mi ponevo e': se un client windows ha aperto un file, come gli sincronizza una richiesta di accesso allo stesso file da un client linux?
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Nota che per i programmi che non usano i lock, puoi usare l'utility flock (v. man flock) per effettuare il lock in loro vece.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
La situazione che potrebbe verificarsi è questa:
-Il file risiede su una macchina windows(ma potrebbe essere linux) -Un client Linux accede dalla Lan al file e dovrebbe acquisirne tutti i privileggi in quanto la risorsa è libera. -Un client windows accede al file, ma ora dovrebbe essere limitato alla sola lettura.... Come sfrutto i lock per fare ciò...avendo sistemi diversi e la lan di mezzo.? |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Sotto linux si può aggirare questo limite se usi gli advisory lock (non i mandatory!) e ignori l'impossibilità di prendere il write lock. Ma sta al programma comportarsi così, ed è questionabile se è un comportamento corretto.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
|
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sì che può. Non puoi però mettere un wrlock su un file, e sperare di acquisirne contemporaneamente un rdlock. Da quello che descrivi, è questo che ti serve.
Qui windows è un pò più flessibile, ti consente di aprire un file in scrittura consentendo ulteriori aperture in lettura ma non in scrittura. Sotto linux questo richiede una maggiore cooperazione dei programmi.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:19.





















