For my apps in Gambas, I use lockfiles, not folders, to lock a certain file. Experience told me that "sometimes" when two users/processes want to access the same file, these may overlap. So I added an identification method and a time delay in case of locks. This is what it looks like (kinda prototyped):
WHILE Exist(theLockFile) THEN OPEN theLockFile FOR READ ... LINE INPUT firstLine CLOSE ... IF firstLine = myOwnName THEN 'old lock file from myself: KILL theLockFile 'may be deleted, then proceed ELSE 'lock file from someone else: WAIT one second WEND 'now first of all, write my own lockfile 'then begin reading the file I want 'finally delete lockfile This is how this looks in practice: WHILE Exist(pfad &/ "klassenbuch.block") OPEN pfad &/ "klassenbuch.block" FOR READ AS #dtnr LINE INPUT #dtnr, t$ CLOSE #dtnr IF t$ = system.User THEN KILL pfad &/ "klassenbuch.block" ELSE WAIT 1 END IF WEND OPEN pfad &/ "klassenbuch.block" FOR WRITE CREATE DIRECT AS #dtnr PRINT #dtnr, system.User CLOSE #dtnr OPEN karteiVerz &/ jg &/ "klassenbuch" FOR READ AS #dtnr and so on. While I am writing this email, I find that this has one big drawback: If the lock file was made by someone else and that app crashed, my program will wait forever for the lockfile to disappear. So one should add a counter, e. g. 5 seconds, to stop waiting. Regards Rolf nando schrieb: > In some applications, I create a folder as a lock. > The existance of the folder indicates 'locked' > It works very well and is used through Samba to share > the lock on both the linux and windows side. > -Fernando > > > ---------- Original Message ----------- > From: Benoit Minisini <[EMAIL PROTECTED]> > To: mailing list for gambas users <gambas-user@lists.sourceforge.net> > Sent: Fri, 26 Sep 2008 23:51:57 +0200 > Subject: Re: [Gambas-user] How to lock a file > >> On vendredi 26 septembre 2008, Almanova Sistemi wrote: >>> I need to lock the file to avoid writing by another user in multiuser >>> environment >>> >> Sorry for that, the documentation is completely false. But who wrote it? :-) >> >> The LOCK instruction does not lock a specific stream not a stream, but >> instead >> use a specific path to create a global system lock. >> >> You use it this way: >> >> DIM hFile AS File >> >> TRY hFile = LOCK "~/lock" >> IF ERROR THEN >> PRINT "Already locked by something else!" >> ELSE >> PRINT "Got locked!" >> ... >> UNLOCK hFile >> ENDIF >> >> Do not rely on the lock file contents. It is truncated to zero byte when the >> lock is acquired. >> >> Regards, >> >> -- >> Benoit Minisini >> ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user