[fpc-devel] How to use fpFlock?
ik
idokan at gmail.com
Tue May 6 09:15:24 CEST 2008
You should use LOCK_EX instead (exclusive lock rather then shared lock).
>From the man file (man 2 flock):
LOCK_SH Place a shared lock. More than one process
may hold a shared lock for a given file at a given time.
LOCK_EX Place an exclusive lock. Only one process may
hold an exclusive lock for a given file at a given time.
LOCK_UN Remove an existing lock held by this process.
Ido
On Tue, May 6, 2008 at 9:38 AM, amir <amir at aavani.net> wrote:
> So what wrong is with the following code?
> When running two instance of this program, *both* print "After Flock" and
> wait for an input?
>
> uses
> Unix;
> var
> InputFile: TextFile;
>
> begin
> AssignFile (InputFile, 'Lock.txt');
> WriteLn ('Before Flock');
> Flush (Output);
> Fpflock (InputFile, LOCK_SH);
> WriteLn ('After Flock');
> Flush (Output);
>
> Reset (InputFile);
> ReadLn;
>
> CloseFile (InputFile);
>
> end.
>
>
>
> ik wrote:
>
> > flock in Linux (at least) is blocking by default unless passed with
> > specific parameter.
> >
> > You can try also to create a mutex that only when removed you will
> > access the procedure/function that try to write to the file, and the
> > process that created the mutex is the only one that can write to that
> > file.
> > You of course remove it when you closed the file.
> >
> > Just an idea...
> >
> > Ido
> >
> > On Fri, May 2, 2008 at 5:35 AM, amir <amir at aavani.net> wrote:
> >
> >
> > > Hi,
> > >
> > > I have many process wanting to write in a file. Each process is going
> to
> > > open the file as a writeonly (using Assignfile and rewrite or fpOpen
> with
> > > o_WrOnly). But there is a risk that two processes simultaneously trying
> to
> > > write a message in the file. I want to use fpflock to avoid this. Is it
> > > possible? What I done is something like this:
> > >
> > > AssignFile (OutputFile, FileName);
> > > fpflock (OutputFile, LOCK_EX);
> > > Rewrite (OutputFile);
> > > ...
> > >
> > > The description of fpFlock does not say anything about the default
> > > behavior of fpFlock (Is it blocking?). What I saw told me that it is not
> > > blocking.
> > >
> > > Is it the correct way of using fpFlock?
> > >
> > >
> > > _______________________________________________
> > > fpc-devel maillist - fpc-devel at lists.freepascal.org
> > > http://lists.freepascal.org/mailman/listinfo/fpc-devel
> > >
> > >
> > >
> >
> >
> >
> >
> >
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>
--
http://ik.homelinux.org/
More information about the fpc-devel
mailing list