158 lines · 6.2 KB · Standard ML
RawDownload
(* OS.FileSys -- SML Basis Library *) type dirstream val openDir   : string -> dirstreamval readDir   : dirstream -> string optionval rewindDir : dirstream -> unitval closeDir  : dirstream -> unit val chDir     : string -> unitval getDir    : unit -> stringval mkDir     : string -> unitval rmDir     : string -> unitval isDir     : string -> bool val realPath  : string -> stringval fullPath  : string -> stringval isLink    : string -> boolval readLink  : string -> string val modTime   : string -> Time.timeval setTime   : string * Time.time option -> unitval remove    : string -> unitval rename    : {old: string, new: string} -> unit datatype access = A_READ | A_WRITE | A_EXECval access    : string * access list -> bool val fileSize  : string -> int val tmpName   : unit -> string eqtype file_idval fileId    : string -> file_idval hash      : file_id -> wordval compare   : file_id * file_id -> order (*    These functions operate on the file system.  They raise OS.SysErr   in case of errors.    [openDir p] opens directory p and returns a directory stream for   use by readDir, rewindDir, and closeDir.  Subsequent calls to   readDir will return the directory entries in some unspecified   order.    [readDir dstr] returns SOME(s), consuming an entry s from the   directory stream if it is non-empty; returns NONE if it is empty   (when all directory entries have been read).  Only entries distinct   from the parent arc and the current arc (that is, .. and . in Unix,   DOS, and Windows; see the Path structure) will be returned.      [rewindDir dstr] resets the directory stream as if it had just been   opened.    [closeDir dstr] closes the directory stream.  All subsequent   operations on the stream will raise OS.SysErr.    [chDir p] changes the current working directory to p.  This affects   calls to the functions use, load, compile in the interactive   system, as well as all functions defined in this library.  If p   specifies a volume name, then this command also changes the current   volume (relevant under DOS, Windows, OS/2, etc.).      [getDir ()] returns the name of the current working directory.    [mkDir p] creates directory p on the file system.    [rmDir p] removes directory p from the file system.    [isDir p] tests whether p is a directory.    [fullPath p] returns a canonical form of path p, where all   occurrences of the arcs ".", "..", "" have been expanded or   removed, and (under Unix) symbolic links have been fully expanded.   Raises SysErr if a directory on the path, or the file or directory   named, does not exist or is not accessible, or if there is a link   loop.    [realPath p] behaves as fullPath(p) if p is absolute.  If p is   relative and on the same volume as the current working directory,   it returns a canonical path relative to the current working   directory, where superfluous occurrences of the arcs ".", "..", ""   have been removed, and (under Unix) symbolic links have been fully   expanded.  Raises SysErr if a directory on the path, or the file or   directory named, does not exist or is not accessible, or if there   is a link loop.  Raises Path if p is relative and on a different   volume than the current working directory.    [isLink p] returns true if p names a symbolic link.  Raises SysErr   if the file does not exist or there is an access violation.  On   operating systems without symbolic links, it returns false, or   raises SysErr if the file does not exist or there is an access   violation.    [readLink p] returns the contents of the symbolic link p.  Raises   SysErr if p does not exist or is not a symbolic link, or there is   an access violation.  On operating systems without symbolic links,   it raises SysErr.    [modTime p] returns the modification time of file p.    [setTime (p, tmopt)] sets the modification and access time of file   p.  If tmopt is SOME t, then the time t is used; otherwise the   current time, that is, Time.now(), is used.    [remove p] deletes file p from the file system.    [rename {old, new}] changes the name of file `old' to `new'.    [access] is the type of access permissions:    [A_READ] specifies read access.    [A_WRITE] specifies write access.    [A_EXEC] specifies permission to execute the file (or directory).    [access (p, accs)] tests the access permissions of file p,   expanding symbolic links as necessary.  If the list accs of   required access permission is empty, it tests whether p exists.  If   accs contains A_READ, A_WRITE, or A_EXEC, respectively, it tests   whether the user process has read, write, or execute permission for   the file.         Under Unix, the access test is done with the `real' user   id and group id (as opposed to the `effective' user id and group   id) of the user process.  Hence access("file", [A_READ]) may return   false, yet the file may be readable by the process, in case the   effective user id or group id has been changed by setuid.    [fileSize p] return the size, in bytes, of the file p.  Raises SysErr    if p does not exist or its directory is not accessible.    [tmpName ()] returns a file name suitable for creating a fresh   temporary file.  Note that there is no guarantee that the file name   will be unique, since a file of that name may be created between   the call to tmpName and a subsequent call to openOut which creates   the file.  The file name will be absolute, usually of the form   /tmp/xxxxxxxx provided by POSIX tmpnam (3).    [file_id] is the type of unique identities of file system objects   (including device ids and volume ids, but possibly insensitive to   volume changes on removable volumes, such as tapes and diskettes).   The set of file ids is equipped with a total linear order.    [fileId p] returns the file_id of the file system object named by   path p.  It holds that fileId p1 = fileId p2 if and only if p1 and   p2 name the same file system object.      [hash fid] returns a hashvalue for fid, suitable for use in a   hashtable of file ids (and hence files).     If fid1 = fid2 then hash fid1 = hash fid2.    [compare (fid1, fid2)] returns LESS, EQUAL, or GREATER, according   as fid1 precedes, equals, or follows fid2 in the total linear order   on file ids.  This is suitable for e.g. an ordered binary tree of   file ids (and hence files).  *)