Thread overview
file locks
Jul 30, 2008
llee
Jul 30, 2008
BCS
Jul 30, 2008
Sean Kelly
Jul 30, 2008
Koroskin Denis
Jul 30, 2008
llee
Jul 31, 2008
Rakan Alhneiti
July 30, 2008
Is there any way to lock a file in D. I'm writing an application that needs to support concurrent access to a file, and would like to lock the file during write operations to prevent other process instances from reading invalid data.
July 30, 2008
Reply to llee,

> Is there any way to lock a file in D. I'm writing an application that
> needs to support concurrent access to a file, and would like to lock
> the file during write operations to prevent other process instances
> from reading invalid data.
> 

there may be some D library calls to do it (I haven't seen one, or looked) but if there isn't, you can always fall back on however you would do it in C.


July 30, 2008
BCS wrote:
> Reply to llee,
> 
>> Is there any way to lock a file in D. I'm writing an application that
>> needs to support concurrent access to a file, and would like to lock
>> the file during write operations to prevent other process instances
>> from reading invalid data.
>>
> 
> there may be some D library calls to do it (I haven't seen one, or looked) but if there isn't, you can always fall back on however you would do it in C.

On POSIX systems, file locking is purely cooperative.  There is no way to prevent users from opening your file if they so choose.  For this reason, I consider file locking largely useless beyond the scope of how a specific application behaves with respect to files it controls.


Sean
July 30, 2008
On Wed, 30 Jul 2008 20:14:59 +0400, llee <llee@goucher.edu> wrote:

> Is there any way to lock a file in D. I'm writing an application that needs to support concurrent access to a file, and would like to lock the file during write operations to prevent other process instances from reading invalid data.

In Tango, when you create a FileConduit you specify a Share attribute that affects concurrent file access policy:

enum Share : ubyte      {
    None=0,                 /// no sharing
    Read,                   /// shared reading
    ReadWrite,              /// open for anything
}

Is it what are you looking for?
July 30, 2008
Koroskin Denis Wrote:

> On Wed, 30 Jul 2008 20:14:59 +0400, llee <llee@goucher.edu> wrote:
> 
> > Is there any way to lock a file in D. I'm writing an application that needs to support concurrent access to a file, and would like to lock the file during write operations to prevent other process instances from reading invalid data.
> 
> In Tango, when you create a FileConduit you specify a Share attribute that affects concurrent file access policy:
> 
> enum Share : ubyte      {
>      None=0,                 /// no sharing
>      Read,                   /// shared reading
>      ReadWrite,              /// open for anything
> }
> 
> Is it what are you looking for?

Looks good, but I'm using Phobos.
July 31, 2008
llee wrote:
> Koroskin Denis Wrote:
> 
>> On Wed, 30 Jul 2008 20:14:59 +0400, llee <llee@goucher.edu> wrote:
>>
>>> Is there any way to lock a file in D. I'm writing an application that  needs to support concurrent access to a file, and would like to lock the  file during write operations to prevent other process instances from  reading invalid data.
>> In Tango, when you create a FileConduit you specify a Share attribute that  affects concurrent file access policy:
>>
>> enum Share : ubyte      {
>>      None=0,                 /// no sharing
>>      Read,                   /// shared reading
>>      ReadWrite,              /// open for anything
>> }
>>
>> Is it what are you looking for?
> 
> Looks good, but I'm using Phobos.
AFAIK, on windows, opening a file in binary mode locks the file from being opened. it displays "Already in use" message. i wrote a program to lock files in vb6 years ago and it worked. Dont know about Linux and it's behavior on such thing