[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