[fpc-devel] How to use fpFlock?

amir amir at aavani.net
Tue May 6 09:21:57 CEST 2008


I have tried both of them (LOCK_SH and LOCK_EX). But the result was the 
same.

ik wrote:
> 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
>>
>>     
>
>
>
>   




More information about the fpc-devel mailing list