[Haskell-cafe] Opening the same file multiple times
Duncan Coutts
duncan.coutts at worc.ox.ac.uk
Mon Dec 12 07:06:52 EST 2005
On Mon, 2005-12-12 at 07:43 +0200, Einar Karttunen wrote:
> Hello
>
> It seems that opening the same file multiple times (one writer
> and multiple readers) is not supported at least on *nix with
> GHC. I want to use one Handle to use append data till the
> end of the file while other Handles perform random access
> IO with seeks on the file.
It states in the Haskell Report 21.2.3:
http://haskell.org/onlinereport/io.html
Implementations should enforce as far as possible, at least
locally to the Haskell process, multiple-reader single-writer
locking on files. That is, there may either be many handles on
the same file which manage input, or just one handle on the file
which manages output. If any open or semi-closed handle is
managing a file for output, no new handle can be allocated for
that file. If any open or semi-closed handle is managing a file
for input, new handles can only be allocated if they do not
manage output. Whether two files are the same is
implementation-dependent, but they should normally be the same
if they have the same absolute path name and neither has been
renamed, for example.
So yes, what you're trying to do is not supported by the standard IO
library. GHC is doing the right thing and hugs is not.
I'm not sure which layer implements the file locking so it may be that
you can get underneath by using the System.Posix.IO functions.
Duncan
More information about the Haskell-Cafe
mailing list