Add support for more OpenFileFlags and refactor 'openFd' (PR #59)
[packages/unix.git] / System / Posix / IO / ByteString.hsc
1 #if __GLASGOW_HASKELL__ >= 709
2 {-# LANGUAGE Safe #-}
3 #else
4 {-# LANGUAGE Trustworthy #-}
5 #endif
6 -----------------------------------------------------------------------------
7 -- |
8 -- Module      :  System.Posix.IO.ByteString
9 -- Copyright   :  (c) The University of Glasgow 2002
10 -- License     :  BSD-style (see the file libraries/base/LICENSE)
11 --
12 -- Maintainer  :  libraries@haskell.org
13 -- Stability   :  provisional
14 -- Portability :  non-portable (requires POSIX)
15 --
16 -- POSIX IO support.  These types and functions correspond to the unix
17 -- functions open(2), close(2), etc.  For more portable functions
18 -- which are more like fopen(3) and friends from stdio.h, see
19 -- "System.IO".
20 --
21 -----------------------------------------------------------------------------
22
23 #include "HsUnix.h"
24
25 module System.Posix.IO.ByteString (
26     -- * Input \/ Output
27
28     -- ** Standard file descriptors
29     stdInput, stdOutput, stdError,
30
31     -- ** Opening and closing files
32     OpenMode(..),
33     OpenFileFlags(..), defaultFileFlags,
34     openFd, createFile,
35     closeFd,
36
37     -- ** Reading\/writing data
38     -- |Programmers using the 'fdRead' and 'fdWrite' API should be aware that
39     -- EAGAIN exceptions may occur for non-blocking IO!
40
41     fdRead, fdWrite,
42     fdReadBuf, fdWriteBuf,
43
44     -- ** Seeking
45     fdSeek,
46
47     -- ** File options
48     FdOption(..),
49     queryFdOption,
50     setFdOption,
51
52     -- ** Locking
53     FileLock,
54     LockRequest(..),
55     getLock,  setLock,
56     waitToSetLock,
57
58     -- ** Pipes
59     createPipe,
60
61     -- ** Duplicating file descriptors
62     dup, dupTo,
63
64     -- ** Converting file descriptors to\/from Handles
65     handleToFd,
66     fdToHandle,
67
68   ) where
69
70 import System.Posix.Types
71 import System.Posix.IO.Common
72
73 import System.Posix.ByteString.FilePath
74
75 -- |Open and optionally create this file.  See 'System.Posix.Files'
76 -- for information on how to use the 'FileMode' type.
77 openFd :: RawFilePath
78        -> OpenMode
79        -> OpenFileFlags
80        -> IO Fd
81 openFd name how flags =
82    withFilePath name $ \str ->
83      throwErrnoPathIfMinus1Retry "openFd" name $
84        open_ str how flags
85
86 -- |Create and open this file in WriteOnly mode.  A special case of
87 -- 'openFd'.  See 'System.Posix.Files' for information on how to use
88 -- the 'FileMode' type.
89
90 createFile :: RawFilePath -> FileMode -> IO Fd
91 createFile name mode
92   = openFd name WriteOnly defaultFileFlags{ trunc=True, creat=(Just mode) }