The structure FILE-MODE implements a data type for file modes. The
code is copied verbatim from Scheme 48 0.57.
================================================================================
After installation, use the switch
-lel file-mode/load.scm
to load this library.
================================================================================
A file mode is a boxed integer representing a file protection mask.
* (file-mode permission-name ...) -> file-mode syntax
* (file-mode? x) -> boolean
* (file-mode+ file-mode ...) -> file-mode
* (file-mode- file-mode0 file-mode1) -> file-mode
FILE-MODE is syntax for creating file modes. The mode-names are listed
below. FILE-MODE? is a predicate for file modes. FILE-MODE+ returns a
mode that contains all of permissions of its arguments. FILE-MODE-
returns a mode that has all of the permissions of FILE-MODE0 that are
not in FILE-MODE1.
* (file-mode=? file-mode0 file-mode1) -> boolean
* (file-mode<=? file-mode0 file-mode1) -> boolean
* (file-mode>=? file-mode0 file-mode1) -> boolean
FILE-MODE=? returns true if the two modes are exactly the
same. FILE-MODE<=? returns true if FILE-MODE0 has a subset of the
permissions of FILE-MODE1. FILE-MODE>=? is FILE-MODE<=? with the
arguments reversed.
* (file-mode->integer file-mode) -> integer
* (integer->file-mode integer) -> file-mode
INTEGER->FILE-MODE and FILE-MODE->INTEGER translate file modes to and
from the classic Unix file mode masks. These may not be the masks used
by the underlying OS.
Permission name Bit mask
set-uid #o4000 set user id when executing
set-gid #o2000 set group id when executing
owner-read #o0400 read by owner
owner-write #o0200 write by owner
owner-exec #o0100 execute (or search) by owner
group-read #o0040 read by group
group-write #o0020 write by group
group-exec #o0010 execute (or search) by group
other-read #o0004 read by others
other-write #o0002 write by others
other-exec #o0001 execute (or search) by others
Names for sets of permissions
owner #o0700 read, write, and execute by owner
group #o0070 read, write, and execute by group
other #o0007 read, write, and execute by others
read #o0444 read by anyone
write #o0222 write by anyone
exec #o0111 execute by anyone
all #o0777 anything by anyone