;;; Flags for open(2) and fcntl(2). ;;; Copyright (c) 1993 by Olin Shivers. ;;; Modified for Solaris by tvb@math.ufl.edu (define-syntax define-open-flags (syntax-rules () ((define-errnos form ...) (begin (define-enum-constant "open" . form) ...)))) (define-open-flags (read 0) (write 1) (read+write 2) (append 8) (create #x0100) (exclusive #x0400) (no-control-tty #x800) ;claims to be POSIX (nonblocking #x80) ;claims to be POSIX (truncate #x0200) ;;; Not POSIX. (no-delay 4) (sync #x10)) (define open/access-mask (bitwise-ior open/read (bitwise-ior open/write open/read+write))) ;;;; fcntl ;;;; Rough sketch only. Will define a separate proc for each fcntl command. ; ;;;; fcntl commands ;dup ; ;get-flags ; Only gives close-on-exec bit. ;set-flags ; ;get-status ; Returns open flags + get-status flags (below) ;set-status ; Can set: append, sync, async, nbio, nonblocking, no-delay ; ;get-lock ;set-lock ;nonblocking-set-lock ; ;get-record-lock ;set-record-lock ; ;get-owner ; Not POSIX ;set-owner ; Not POSIX ;remote-set-lock ; Not POSIX ;nonblocking-remote-set-lock ; Not POSIX ;remote-get-lock ; Not POSIX ; ;;;; Flags ; ;close-on-exec ; get-flags ; ;async ; get-status ;no-delay ; get-status ;nbio ; get-status ; ;lock/read ; set-lock ;lock/write ; set-lock ;lock/release ; set-lock ;;; These are internal; they are not part of the supported scsh interface. (define fcntl/close-on-exec 1) (define fcntl/dupfd 0) (define fcntl/get-fd-flags 1) (define fcntl/set-fd-flags 2) (define fcntl/get-file-flags 3) (define fcntl/set-file-flags 4) (define fcntl/get-owner 23) ; F_GETOWN (define fcntl/set-owner 24) ; F_SETOWN (define fcntl/get-record-lock 5) ; F_GETLK (define fcntl/set-record-lock-noblock 6) ; F_SETLK (define fcntl/set-record-lock 7) ; F_SETLKW (define lock/read 1) ; F_RDLCK (define lock/write 2) ; F_WRLCK (define lock/release 3) ; F_UNLCK