__hscore_open from HsBase.h
simonmar at microsoft.com
Tue Nov 14 08:02:09 EST 2006
Bulat Ziganshin wrote:
> Hello Simon,
> Tuesday, November 14, 2006, 2:31:17 PM, you wrote:
>>>>> #ifdef mingw32_HOST_OS
>>>>> if ((how & O_WRONLY) || (how & O_RDWR) || (how &
>>>>> O_APPEND)) return _sopen(file,how,_SH_DENYRW,mode);
>>>>> return _sopen(file,how,_SH_DENYWR,mode);
>>>>> return open(file,how,mode);
>>>> I haven't seen this code before, but I wonder if it's an attempt to
>>>> implement the single-writer multiple-reader locking semantics in
>>>> the Haskell 98 IO library?
>>> and second question: HOW this may help this semantics?? in my
>>> investigation, simple 'open' is just fine - it prevents writing by
>>> other processes to the file being written by Haskell program and it
>>> allow to read and write open by other processes of the file that i
>>> only read.
>> But does it allow the file to be opened for reading multiple times
>> by the current process? Perhaps that's the issue.
> no problem at all. i even can read file modified by the same process
>>> may be it was problems on old windowses? and may be this some bug
>>> and this should be rewritten as DENY_WRITE and DENY_NONE,
>>> btw, what is a semantics on Unix? is it the same as i mentioned
>> On Unix by default you can open a file as many times as you like,
>> both for reading and writing. To enforce any restrictions you have
>> to use locks.
> i.e. no sopen at all? in this case, other parts of library should
> make proper locking for unix.
Yes, we do. See http://darcs.haskell.org/packages/base/cbits/lockFile.c.
> but for windows, the code above allow to EITHER multiple readers OR
> one writer. to allow multiple readers AND one writer simultaneously,
> it should be written as
No, multiple readers *or* a single writer is what the Haskell spec says. Go check your Haskell Report.
More information about the Cvs-ghc