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