[fpc-devel] How to use fpFlock?

amir amir at aavani.net
Tue May 6 08:38:08 CEST 2008


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
>>
>>     
>
>
>
>   




More information about the fpc-devel mailing list