7.4. Posix operations on files and directories
Prev | Chapter 7. The `posix` package: POSIX support | Next

## 7.4. Posix operations on files and directories

    openDirStream :: FilePath -> IO DirStream

`openDirStream dir` calls `opendir` to obtain a directory stream for `dir`.

    readDirStream :: DirStream -> IO String

`readDirStream dp` calls `readdir` to obtain the next directory entry (`struct dirent`) for the open directory stream `dp`, and returns the `d_name` member of that structure.

The operation may fail with:

`EOF`

  End of file has been reached.

`SystemError`

  Various other causes.

    rewindDirStream :: DirStream -> IO ()

`rewindDirStream dp` calls `rewinddir` to reposition the directory stream `dp` at the beginning of the directory.

    closeDirStream :: DirStream -> IO ()

`closeDirStream dp` calls `closedir` to close the directory stream `dp`.

    getWorkingDirectory :: IO FilePath

`getWorkingDirectory` calls `getcwd` to obtain the name of the current working directory.

    changeWorkingDirectory :: FilePath -> IO ()

`changeWorkingDirectory dir` calls `chdir` to change the current working directory to `dir`.

    nullFileMode       :: FileMode       -- ---------
    ownerReadMode      :: FileMode       -- r--------
    ownerWriteMode     :: FileMode       -- -w-------
    ownerExecuteMode   :: FileMode       -- --x------
    groupReadMode      :: FileMode       -- ---r-----
    groupWriteMode     :: FileMode       -- ----w----
    groupExecuteMode   :: FileMode       -- -----x---
    otherReadMode      :: FileMode       -- ------r--
    otherWriteMode     :: FileMode       -- -------w-
    otherExecuteMode   :: FileMode       -- --------x
    setUserIDMode      :: FileMode       -- --S------
    setGroupIDMode     :: FileMode       -- -----S---

    stdFileMode        :: FileMode       -- rw-rw-rw-

    ownerModes         :: FileMode       -- rwx------
    groupModes         :: FileMode       -- ---rwx---
    otherModes         :: FileMode       -- ------rwx
    accessModes        :: FileMode       -- rwxrwxrwx

    unionFileModes     :: FileMode -> FileMode -> FileMode
    intersectFileModes :: FileMode -> FileMode -> FileMode

    stdInput  :: Fd
    stdInput  = intToFd 0

    stdOutput :: Fd
    stdOutput = intToFd 1

    stdError  :: Fd
    stdError  = intToFd 2

    data OpenFileFlags =
     OpenFileFlags {
        append    :: Bool,
        exclusive :: Bool,
        noctty    :: Bool,
        nonBlock  :: Bool,
        trunc     :: Bool
     }

    openFd :: FilePath
           -> OpenMode
           -> Maybe FileMode  -- Just x => O_CREAT, Nothing => must exist
           -> OpenFileFlags
           -> IO Fd

`openFd path acc mode (OpenFileFlags app excl noctty nonblock trunc)` calls `open` to obtain a `Fd` for the file `path` with access mode `acc`. If `mode` is `Just m`, the `O_CREAT` flag is set and the file's permissions will be based on `m` if it does not already exist; otherwise, the `O_CREAT` flag is not set. The arguments `app`, `excl`, `noctty`, `nonblock`, and `trunc` control whether or not the flags `O_APPEND`, `O_EXCL`, `O_NOCTTY`, `O_NONBLOCK`, and `O_TRUNC` are set, respectively.

    createFile :: FilePath -> FileMode -> IO Fd

`createFile path mode` calls `creat` to obtain a `Fd` for file `path`, which will be created with permissions based on `mode` if it does not already exist.

    setFileCreationMask :: FileMode -> IO FileMode

`setFileCreationMask mode` calls `umask` to set the process's file creation mask to `mode`. The previous file creation mask is returned.

    createLink :: FilePath -> FilePath -> IO ()

`createLink old new` calls `link` to create a new path, `new`, linked to an existing file, `old`.

    createDirectory :: FilePath -> FileMode -> IO ()

`createDirectory dir mode` calls `mkdir` to create a new directory, `dir`, with permissions based on `mode`.

    createNamedPipe :: FilePath -> FileMode -> IO ()

`createNamedPipe fifo mode` calls `mkfifo` to create a new named pipe, `fifo`, with permissions based on `mode`.

    removeLink :: FilePath -> IO ()

`removeLink path` calls `unlink` to remove the link named `path`.

    removeDirectory :: FilePath -> IO ()

`removeDirectory dir` calls `rmdir` to remove the directory named `dir`.

    rename :: FilePath -> FilePath -> IO ()

`rename old new` calls `rename` to rename a file or directory from `old` to `new`.

    fileMode          :: FileStatus -> FileMode

    fileID            :: FileStatus -> FileID
    deviceID          :: FileStatus -> DeviceID

    linkCount         :: FileStatus -> LinkCount

    fileOwner         :: FileStatus -> UserID
    fileGroup         :: FileStatus -> GroupID
    fileSize          :: FileStatus -> FileOffset

    accessTime        :: FileStatus -> EpochTime
    modificationTime  :: FileStatus -> EpochTime
    statusChangeTime  :: FileStatus -> EpochTime

    isDirectory       :: FileStatus -> Bool
    isCharacterDevice :: FileStatus -> Bool
    isBlockDevice     :: FileStatus -> Bool
    isRegularFile     :: FileStatus -> Bool
    isNamedPipe       :: FileStatus -> Bool

    getFileStatus     :: FilePath -> IO FileStatus

`getFileStatus path` calls `stat` to get the `FileStatus` information for the file `path`.

    getFdStatus :: Fd -> IO FileStatus

`getFdStatus fd` calls `fstat` to get the `FileStatus` information for the file associated with `Fd` `fd`.

    queryAccess :: FilePath -> Bool -> Bool -> Bool -> IO Bool

`queryAccess path r w x` calls `access` to test the access permissions for file `path`. The three arguments, `r`, `w`, and `x` control whether or not `access` is called with `R_OK`, `W_OK`, and `X_OK` respectively.

    queryFile :: FilePath -> IO Bool

`queryFile path` calls `access` with `F_OK` to test for the existence for file `path`.

    setFileMode :: FilePath -> FileMode -> IO ()

`setFileMode path mode` calls `chmod` to set the permission bits associated with file `path` to `mode`.

    setOwnerAndGroup :: FilePath -> UserID -> GroupID -> IO ()

`setOwnerAndGroup path uid gid` calls `chown` to set the `UserID` and `GroupID` associated with file `path` to `uid` and `gid`, respectively.

    setFileTimes :: FilePath -> EpochTime -> EpochTime -> IO ()

`setFileTimes path atime mtime` calls `utime` to set the access and modification times associated with file `path` to `atime` and `mtime`, respectively.

    touchFile :: FilePath -> IO ()

`touchFile path` calls `utime` to set the access and modification times associated with file `path` to the current time.

    getPathVar :: PathVar -> FilePath -> IO Limit

`getPathVar var path` calls `pathconf` to obtain the dynamic value of the requested configurable file limit or option associated with file or directory `path`. For defined file limits, `getPathVar` returns the associated value. For defined file options, the result of `getPathVar` is undefined, but not failure. The operation may fail with:

`NoSuchThing`

  The requested file limit or option is undefined.

`SystemError`

  Various other causes.

    getFdVar :: PathVar -> Fd -> IO Limit

`getFdVar var fd` calls `fpathconf` to obtain the dynamic value of the requested configurable file limit or option associated with the file or directory attached to the open channel `fd`. For defined file limits, `getFdVar` returns the associated value. For defined file options, the result of `getFdVar` is undefined, but not failure.

The operation may fail with:

`NoSuchThing`

  The requested file limit or option is undefined.

`SystemError`

  Various other causes.

Prev | Up | Next
7.3. Posix Process Environment | Home | 7.5. Posix Input and Output Primitives