| Copyright | (c) The University of Glasgow 2008 | 
|---|---|
| License | see libraries/base/LICENSE | 
| Maintainer | [email protected] | 
| Stability | internal | 
| Portability | non-portable (GHC Extensions) | 
| Safe Haskell | Trustworthy | 
| Language | Haskell2010 | 
GHC.IO.BufferedIO
Description
Class of buffered IO devices
Synopsis
- class BufferedIO dev where- newBuffer :: dev -> BufferState -> IO (Buffer Word8)
- fillReadBuffer :: dev -> Buffer Word8 -> IO (Int, Buffer Word8)
- fillReadBuffer0 :: dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8)
- emptyWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8)
- flushWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8)
- flushWriteBuffer0 :: dev -> Buffer Word8 -> IO (Int, Buffer Word8)
 
- readBuf :: RawIO dev => dev -> Buffer Word8 -> IO (Int, Buffer Word8)
- readBufNonBlocking :: RawIO dev => dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8)
- writeBuf :: RawIO dev => dev -> Buffer Word8 -> IO (Buffer Word8)
- writeBufNonBlocking :: RawIO dev => dev -> Buffer Word8 -> IO (Int, Buffer Word8)
Documentation
class BufferedIO dev where Source #
The purpose of BufferedIO is to provide a common interface for I/O
 devices that can read and write data through a buffer.  Devices that
 implement BufferedIO include ordinary files, memory-mapped files,
 and bytestrings.  The underlying device implementing a Handle
 must provide BufferedIO.
Minimal complete definition
newBuffer, fillReadBuffer, fillReadBuffer0, flushWriteBuffer, flushWriteBuffer0
Methods
newBuffer :: dev -> BufferState -> IO (Buffer Word8) Source #
allocate a new buffer. The size of the buffer is at the discretion of the device; e.g. for a memory-mapped file the buffer will probably cover the entire file.
fillReadBuffer :: dev -> Buffer Word8 -> IO (Int, Buffer Word8) Source #
reads bytes into the buffer, blocking if there are no bytes available. Returns the number of bytes read (zero indicates end-of-file), and the new buffer.
fillReadBuffer0 :: dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8) Source #
reads bytes into the buffer without blocking. Returns the number of bytes read (Nothing indicates end-of-file), and the new buffer.
emptyWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8) Source #
Prepares an empty write buffer. This lets the device decide how to set up a write buffer: the buffer may need to point to a specific location in memory, for example. This is typically used by the client when switching from reading to writing on a buffered read/write device.
There is no corresponding operation for read buffers, because before
 reading the client will always call fillReadBuffer.
flushWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8) Source #
Flush all the data from the supplied write buffer out to the device. The returned buffer should be empty, and ready for writing.
flushWriteBuffer0 :: dev -> Buffer Word8 -> IO (Int, Buffer Word8) Source #
Flush data from the supplied write buffer out to the device without blocking. Returns the number of bytes written and the remaining buffer.
Instances
| BufferedIO FD Source # | Since: base-4.1.0.0 | 
| Defined in GHC.IO.FD Methods newBuffer :: FD -> BufferState -> IO (Buffer Word8) Source # fillReadBuffer :: FD -> Buffer Word8 -> IO (Int, Buffer Word8) Source # fillReadBuffer0 :: FD -> Buffer Word8 -> IO (Maybe Int, Buffer Word8) Source # emptyWriteBuffer :: FD -> Buffer Word8 -> IO (Buffer Word8) Source # flushWriteBuffer :: FD -> Buffer Word8 -> IO (Buffer Word8) Source # flushWriteBuffer0 :: FD -> Buffer Word8 -> IO (Int, Buffer Word8) Source # | |