System.PosixCompat.Files
Contents
Description
This module makes the operations exported by System.Posix.Files
available on all platforms. On POSIX systems it re-exports operations from
System.Posix.Files
. On other platforms it emulates the operations as far
as possible.
/NOTE: the portable implementations are not well tested, in some cases functions are only stubs./
- unionFileModes :: FileMode -> FileMode -> FileMode
- intersectFileModes :: FileMode -> FileMode -> FileMode
- nullFileMode :: FileMode
- ownerReadMode :: FileMode
- ownerWriteMode :: FileMode
- ownerExecuteMode :: FileMode
- ownerModes :: FileMode
- groupReadMode :: FileMode
- groupWriteMode :: FileMode
- groupExecuteMode :: FileMode
- groupModes :: FileMode
- otherReadMode :: FileMode
- otherWriteMode :: FileMode
- otherExecuteMode :: FileMode
- otherModes :: FileMode
- setUserIDMode :: FileMode
- setGroupIDMode :: FileMode
- stdFileMode :: FileMode
- accessModes :: FileMode
- setFileMode :: FilePath -> FileMode -> IO ()
- setFdMode :: Fd -> FileMode -> IO ()
- setFileCreationMask :: FileMode -> IO FileMode
- fileAccess :: FilePath -> Bool -> Bool -> Bool -> IO Bool
- fileExist :: FilePath -> IO Bool
- data FileStatus
- getFileStatus :: FilePath -> IO FileStatus
- getFdStatus :: Fd -> IO FileStatus
- getSymbolicLinkStatus :: FilePath -> IO FileStatus
- deviceID :: FileStatus -> DeviceID
- fileID :: FileStatus -> FileID
- fileMode :: FileStatus -> FileMode
- linkCount :: FileStatus -> LinkCount
- fileOwner :: FileStatus -> UserID
- fileGroup :: FileStatus -> GroupID
- specialDeviceID :: FileStatus -> DeviceID
- fileSize :: FileStatus -> FileOffset
- accessTime :: FileStatus -> EpochTime
- modificationTime :: FileStatus -> EpochTime
- statusChangeTime :: FileStatus -> EpochTime
- isBlockDevice :: FileStatus -> Bool
- isCharacterDevice :: FileStatus -> Bool
- isNamedPipe :: FileStatus -> Bool
- isRegularFile :: FileStatus -> Bool
- isDirectory :: FileStatus -> Bool
- isSymbolicLink :: FileStatus -> Bool
- isSocket :: FileStatus -> Bool
- createNamedPipe :: FilePath -> FileMode -> IO ()
- createDevice :: FilePath -> FileMode -> DeviceID -> IO ()
- createLink :: FilePath -> FilePath -> IO ()
- removeLink :: FilePath -> IO ()
- createSymbolicLink :: FilePath -> FilePath -> IO ()
- readSymbolicLink :: FilePath -> IO FilePath
- rename :: FilePath -> FilePath -> IO ()
- setOwnerAndGroup :: FilePath -> UserID -> GroupID -> IO ()
- setFdOwnerAndGroup :: Fd -> UserID -> GroupID -> IO ()
- setSymbolicLinkOwnerAndGroup :: FilePath -> UserID -> GroupID -> IO ()
- setFileTimes :: FilePath -> EpochTime -> EpochTime -> IO ()
- touchFile :: FilePath -> IO ()
- setFileSize :: FilePath -> FileOffset -> IO ()
- setFdSize :: Fd -> FileOffset -> IO ()
- data PathVar
- getPathVar :: FilePath -> PathVar -> IO Limit
- getFdPathVar :: Fd -> PathVar -> IO Limit
File modes
unionFileModes :: FileMode -> FileMode -> FileMode
Combines the two file modes into one that contains modes that appear in either.
intersectFileModes :: FileMode -> FileMode -> FileMode
Combines two file modes into one that only contains modes that appear in both.
No permissions.
Owner has read permission.
Owner has write permission.
Owner has execute permission.
Owner has read, write and execute permission.
Group has read permission.
Group has write permission.
Group has execute permission.
Group has read, write and execute permission.
Others have read permission.
Others have write permission.
Others have execute permission.
Others have read, write and execute permission.
Set user ID on execution.
Set group ID on execution.
Owner, group and others have read and write permission.
Owner, group and others have read, write and execute permission.
Setting file modes
setFileMode :: FilePath -> FileMode -> IO ()
setFileMode path mode
changes permission of the file given by path
to mode
. This operation may fail with throwErrnoPathIfMinus1_
if path
doesn't exist or if the effective user ID of the current process is not that
of the file's owner.
Note: calls chmod
.
setFdMode :: Fd -> FileMode -> IO ()
setFdMode fd mode
acts like setFileMode
but uses a file descriptor
fd
instead of a FilePath
.
Note: calls fchmod
.
setFileCreationMask :: FileMode -> IO FileMode
setFileCreationMask mode
sets the file mode creation mask to mode
.
Modes set by this operation are subtracted from files and directories upon
creation. The previous file creation mask is returned.
Note: calls umask
.
Checking file existence and permissions
fileAccess :: FilePath -> Bool -> Bool -> Bool -> IO Bool
fileAccess name read write exec
checks if the file (or other file system
object) name
can be accessed for reading, writing and/or executing. To
check a permission set the corresponding argument to True
.
Note: calls access
.
File status
data FileStatus
POSIX defines operations to get information, such as owner, permissions,
size and access times, about a file. This information is represented by the
FileStatus
type.
Note: see chmod
.
Obtaining file status
getFileStatus :: FilePath -> IO FileStatus
getFileStatus path
calls gets the FileStatus
information (user ID,
size, access times, etc.) for the file path
.
Note: calls stat
.
getFdStatus :: Fd -> IO FileStatus
getFdStatus fd
acts as getFileStatus
but uses a file descriptor fd
.
Note: calls fstat
.
getSymbolicLinkStatus :: FilePath -> IO FileStatus
Acts as getFileStatus
except when the FilePath
refers to a symbolic
link. In that case the FileStatus
information of the symbolic link itself
is returned instead of that of the file it points to.
Note: calls lstat
.
Querying file status
deviceID :: FileStatus -> DeviceID
ID of the device on which this file resides.
fileID :: FileStatus -> FileID
inode number
fileMode :: FileStatus -> FileMode
File mode (such as permissions).
linkCount :: FileStatus -> LinkCount
Number of hard links to this file.
fileOwner :: FileStatus -> UserID
ID of owner.
fileGroup :: FileStatus -> GroupID
ID of group.
specialDeviceID :: FileStatus -> DeviceID
Describes the device that this file represents.
fileSize :: FileStatus -> FileOffset
Size of the file in bytes. If this file is a symbolic link the size is the length of the pathname it contains.
accessTime :: FileStatus -> EpochTime
Time of last access.
modificationTime :: FileStatus -> EpochTime
Time of last modification.
statusChangeTime :: FileStatus -> EpochTime
Time of last status change (i.e. owner, group, link count, mode, etc.).
isBlockDevice :: FileStatus -> Bool
Checks if this file is a block device.
isCharacterDevice :: FileStatus -> Bool
Checks if this file is a character device.
isNamedPipe :: FileStatus -> Bool
Checks if this file is a named pipe device.
isRegularFile :: FileStatus -> Bool
Checks if this file is a regular file device.
isDirectory :: FileStatus -> Bool
Checks if this file is a directory device.
isSymbolicLink :: FileStatus -> Bool
Checks if this file is a symbolic link device.
isSocket :: FileStatus -> Bool
Checks if this file is a socket device.
Creation
createNamedPipe :: FilePath -> FileMode -> IO ()
createNamedPipe fifo mode
creates a new named pipe, fifo
, with permissions based on
mode
. May fail with throwErrnoPathIfMinus1_
if a file named name
already exists or if the effective user ID of the current process doesn't
have permission to create the pipe.
Note: calls mkfifo
.
createDevice :: FilePath -> FileMode -> DeviceID -> IO ()
createDevice path mode dev
creates either a regular or a special file
depending on the value of mode
(and dev
). mode
will normally be either
blockSpecialMode
or characterSpecialMode
. May fail with
throwErrnoPathIfMinus1_
if a file named name
already exists or if the
effective user ID of the current process doesn't have permission to create
the file.
Note: calls mknod
.
Hard links
createLink :: FilePath -> FilePath -> IO ()
createLink old new
creates a new path, new
, linked to an existing file,
old
.
Note: calls link
.
removeLink :: FilePath -> IO ()
removeLink path
removes the link named path
.
Note: calls unlink
.
Symbolic links
createSymbolicLink :: FilePath -> FilePath -> IO ()
createSymbolicLink file1 file2
creates a symbolic link named file2
which points to the file file1
.
Symbolic links are interpreted at run-time as if the contents of the link had been substituted into the path being followed to find a file or directory.
Note: calls symlink
.
readSymbolicLink :: FilePath -> IO FilePath
Reads the FilePath
pointed to by the symbolic link and returns it.
Note: calls readlink
.
Renaming files
rename :: FilePath -> FilePath -> IO ()
rename old new
renames a file or directory from old
to new
.
Note: calls rename
.
Changing file ownership
setOwnerAndGroup :: FilePath -> UserID -> GroupID -> IO ()
setOwnerAndGroup path uid gid
changes the owner and group of path
to
uid
and gid
, respectively.
If uid
or gid
is specified as -1, then that ID is not changed.
Note: calls chown
.
setFdOwnerAndGroup :: Fd -> UserID -> GroupID -> IO ()
Acts as setOwnerAndGroup
but uses a file descriptor instead of a
FilePath
.
Note: calls fchown
.
setSymbolicLinkOwnerAndGroup :: FilePath -> UserID -> GroupID -> IO ()
Acts as setOwnerAndGroup
but does not follow symlinks (and thus
changes permissions on the link itself).
Note: calls lchown
.
Changing file timestamps
setFileTimes :: FilePath -> EpochTime -> EpochTime -> IO ()
setFileTimes path atime mtime
sets the access and modification times
associated with file path
to atime
and mtime
, respectively.
Note: calls utime
.
touchFile :: FilePath -> IO ()
touchFile path
sets the access and modification times associated with
file path
to the current time.
Note: calls utime
.
Setting file sizes
setFileSize :: FilePath -> FileOffset -> IO ()
Truncates the file down to the specified length. If the file was larger than the given length before this operation was performed the extra is lost.
Note: calls truncate
.
setFdSize :: Fd -> FileOffset -> IO ()
Acts as setFileSize
but uses a file descriptor instead of a FilePath
.
Note: calls ftruncate
.
Find system-specific limits for a file
data PathVar
getPathVar :: FilePath -> PathVar -> IO Limit
getPathVar var path
obtains 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.
Note: calls pathconf
.
getFdPathVar :: Fd -> PathVar -> IO Limit
getFdPathVar var fd
obtains 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, getFdPathVar
returns the associated value. For defined file options, the result of
getFdPathVar
is undefined, but not failure.
Note: calls fpathconf
.