| 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) | 
| Safe Haskell | Safe | 
| Language | Haskell2010 | 
System.Posix.IO
Description
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.
Synopsis
- stdInput :: Fd
- stdOutput :: Fd
- stdError :: Fd
- data OpenMode
- data OpenFileFlags = OpenFileFlags {}
- defaultFileFlags :: OpenFileFlags
- openFd :: FilePath -> OpenMode -> Maybe FileMode -> OpenFileFlags -> IO Fd
- createFile :: FilePath -> FileMode -> IO Fd
- closeFd :: Fd -> IO ()
- fdRead :: Fd -> ByteCount -> IO (String, ByteCount)
- fdWrite :: Fd -> String -> IO ByteCount
- fdReadBuf :: Fd -> Ptr Word8 -> ByteCount -> IO ByteCount
- fdWriteBuf :: Fd -> Ptr Word8 -> ByteCount -> IO ByteCount
- fdSeek :: Fd -> SeekMode -> FileOffset -> IO FileOffset
- data FdOption
- queryFdOption :: Fd -> FdOption -> IO Bool
- setFdOption :: Fd -> FdOption -> Bool -> IO ()
- type FileLock = (LockRequest, SeekMode, FileOffset, FileOffset)
- data LockRequest
- getLock :: Fd -> FileLock -> IO (Maybe (ProcessID, FileLock))
- setLock :: Fd -> FileLock -> IO ()
- waitToSetLock :: Fd -> FileLock -> IO ()
- createPipe :: IO (Fd, Fd)
- dup :: Fd -> IO Fd
- dupTo :: Fd -> Fd -> IO Fd
- handleToFd :: Handle -> IO Fd
- fdToHandle :: Fd -> IO Handle
Input / Output
Standard file descriptors
Opening and closing files
data OpenFileFlags #
Correspond to some of the int flags from C's fcntl.h.
defaultFileFlags :: OpenFileFlags #
Default values for the OpenFileFlags type. False for each of
 append, exclusive, noctty, nonBlock, and trunc.
Close this file descriptor. May throw an exception if this is an invalid descriptor.
Reading/writing data
Programmers using the fdRead and fdWrite API should be aware that
 EAGAIN exceptions may occur for non-blocking IO!
Arguments
| :: Fd | |
| -> Ptr Word8 | Memory in which to put the data | 
| -> ByteCount | Maximum number of bytes to read | 
| -> IO ByteCount | Number of bytes read (zero for EOF) | 
Read data from an Fd into memory.  This is exactly equivalent
 to the POSIX read function.
Arguments
| :: Fd | |
| -> Ptr Word8 | Memory containing the data to write | 
| -> ByteCount | Maximum number of bytes to write | 
| -> IO ByteCount | Number of bytes written | 
Write data from memory to an Fd.  This is exactly equivalent
 to the POSIX write function.
Seeking
fdSeek :: Fd -> SeekMode -> FileOffset -> IO FileOffset #
May throw an exception if this is an invalid descriptor.
File options
Constructors
| AppendOnWrite | O_APPEND | 
| CloseOnExec | FD_CLOEXEC | 
| NonBlockingRead | O_NONBLOCK | 
| SynchronousWrites | O_SYNC | 
queryFdOption :: Fd -> FdOption -> IO Bool #
May throw an exception if this is an invalid descriptor.
setFdOption :: Fd -> FdOption -> Bool -> IO () #
May throw an exception if this is an invalid descriptor.
Locking
type FileLock = (LockRequest, SeekMode, FileOffset, FileOffset) #
data LockRequest #
getLock :: Fd -> FileLock -> IO (Maybe (ProcessID, FileLock)) #
May throw an exception if this is an invalid descriptor.
waitToSetLock :: Fd -> FileLock -> IO () #
May throw an exception if this is an invalid descriptor.
Pipes
createPipe :: IO (Fd, Fd) #
The createPipe function creates a pair of connected file
 descriptors. The first component is the fd to read from, the second
 is the write end.  Although pipes may be bidirectional, this
 behaviour is not portable and programmers should use two separate
 pipes for this purpose.  May throw an exception if this is an
 invalid descriptor.
Duplicating file descriptors
Converting file descriptors to/from Handles
handleToFd :: Handle -> IO Fd #