**Table of Contents**- 8.1. Posix data types
- 8.2. Posix Process Primitives
- 8.3. Posix Process Environment
- 8.4. Posix operations on files and directories
- 8.5. Posix Input and Output Primitives
- 8.6. Posix, Device- and Class-Specific Functions
- 8.7. Posix System Databases
- 8.8. POSIX Errors

The `Posix` interface gives you access to the set of OS
services standardised by POSIX 1003.1b (or the *IEEE Portable
Operating System Interface for Computing Environments* - IEEE Std.
1003.1). The interface is accessed by `import Posix` and
adding `-package posix` on your command-line.

The Posix package is *not* supported under
Windows. We've looked into various ways of providing support, and
other than using Cygwin, none is particularly attractive. If you want
Posix support under Windows, try building GHC for Cygwin; we don't
currently do this, but it is mostly supported.

data ByteCount -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `ByteCount` is a primitive of type `unsigned`. At a minimum,
an conforming implementation must support values in the range
`[0, UINT_MAX]`.

data ClockTick -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `ClockTick` is a primitive of type `clock_t`, which
is used to measure intervals of time in fractions of a second. The
resolution is determined by `getSysVar ClockTick`.

data DeviceID -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `DeviceID` is a primitive of type `dev_t`. It must
be an arithmetic type.

data EpochTime -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `EpochTime` is a primitive of type `time_t`, which is
used to measure seconds since the Epoch. At a minimum, the implementation
must support values in the range `[0, INT_MAX]`.

data FileID -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `FileID` is a primitive of type `ino_t`. It must
be an arithmetic type.

data FileMode -- instance of : Eq |

A `FileMode` is a primitive of type `mode_t`.
It must be an arithmetic type.

data FileOffset -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `FileOffset` is a primitive of type `off_t`. It must
be an arithmetic type.

data GroupID -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `GroupID` is a primitive of type `gid_t`. It must
be an arithmetic type.

data Limit -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `Limit` is a primitive of type `long`.
At a minimum, the implementation must support values in the range
`[LONG_MIN, LONG_MAX]`.

data LinkCount -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `LinkCount` is a primitive of type `nlink_t`. It must
be an arithmetic type.

data ProcessID -- instances of : Eq Ord Num Real Integral Ix Enum Show type ProcessGroupID = ProcessID |

A `ProcessID` is a primitive of type `pid_t`. It
must be a signed arithmetic type.

data UserID -- instances of : Eq Ord Num Real Integral Ix Enum Show |

A `UserID` is a primitive of type `uid_t`. It
must be an arithmetic type.

data DirStream |

data FileStatus |

data GroupEntry |

A `GroupEntry` is a primitive of type `struct group`.

data ProcessTimes |

`ProcessTimes` is a primitive structure containing a
`clock_t` and a `struct tms`.

data SignalSet |

An `SignalSet` is a primitive of type `sigset_t`.

data SystemID |

A `SystemID` is a primitive of type `struct utsname`.

data TerminalAttributes |

data UserEntry |

A `UserEntry` is a primitive of type `struct passwd`.

data BaudRate = B0 | B50 | B75 | B110 | B134 | B150 | B200 | B300 | B600 | B1200 | B1800 | B2400 | B4800 | B9600 | B19200 | B38400 deriving (Eq, Show) data Fd intToFd :: Int -> Fd -- use with care. fdToInt :: Fd -> Int -- ditto. data FdOption = AppendOnWrite | CloseOnExec | NonBlockingRead data ControlCharacter = EndOfFile | EndOfLine | Erase | Interrupt | Kill | Quit | Suspend | Start | Stop type ErrorCode = Int type FileLock = (LockRequest, SeekMode, FileOffset, FileOffset) -- whence start length data FlowAction = SuspendOutput | RestartOutput | TransmitStop | TransmitStart data Handler = Default | Ignore | Catch (IO ()) data LockRequest = ReadLock | WriteLock | Unlock deriving (Eq, Show) data OpenMode = ReadOnly | WriteOnly | ReadWrite data PathVar = LinkLimit | InputLineLimit | InputQueueLimit | FileNameLimit | PathNameLimit | PipeBufferLimit | SetOwnerAndGroupIsRestricted | FileNamesAreNotTruncated data QueueSelector = InputQueue | OutputQueue | BothQueues type Signal = Int data SysVar = ArgumentLimit | ChildLimit | ClockTick | GroupLimit | OpenFileLimit | PosixVersion | HasSavedIDs | HasJobControl data TerminalMode = InterruptOnBreak -- BRKINT | MapCRtoLF -- ICRNL | IgnoreBreak -- IGNBRK | IgnoreCR -- IGNCR | IgnoreParityErrors -- IGNPAR | MapLFtoCR -- INLCR | CheckParity -- INPCK | StripHighBit -- ISTRIP | StartStopInput -- IXOFF | StartStopOutput -- IXON | MarkParityErrors -- PARMRK | ProcessOutput -- OPOST | LocalMode -- CLOCAL | ReadEnable -- CREAD | TwoStopBits -- CSTOPB | HangupOnClose -- HUPCL | EnableParity -- PARENB | OddParity -- PARODD | EnableEcho -- ECHO | EchoErase -- ECHOE | EchoKill -- ECHOK | EchoLF -- ECHONL | ProcessInput -- ICANON | ExtendedFunctions -- IEXTEN | KeyboardInterrupts -- ISIG | NoFlushOnInterrupt -- NOFLSH | BackgroundWriteInterrupt -- TOSTOP data TerminalState = Immediately | WhenDrained | WhenFlushed data ProcessStatus = Exited ExitCode | Terminated Signal | Stopped Signal deriving (Eq, Show) |