(module hmh () (import scheme) (cond-expand (chicken-5 (import (chicken base)) (import (prefix (chicken file posix) posix:)) (import (prefix (chicken process) posix:))) (else (import chicken) (use (only data-structures intersperse)) (use (prefix posix posix:)))) (define (p . args) (apply print (intersperse args " "))) (define log-info p) (define log-debug p) (define (foo) (receive (in-fd out-fd) (posix:create-pipe) (log-info "start test" in-fd out-fd) (let ([out-port (posix:open-output-file* out-fd #:append)] [in-port (posix:open-input-file* in-fd)]) (log-debug "send") (display "1 " out-port) (display "2 " out-port) (display "3 " out-port) (log-debug "flush") (flush-output out-port) ;; (log-debug "close-output-port") ;; (close-output-port out-port) (receive (in-ready? _out-ready?) (posix:file-select in-fd #f 0) (print "in-ready? " in-ready?) (assert in-ready?)) (define (equ? obj) (let ([o (read in-port)]) (log-debug "read" o "exp:" obj) (assert (equal? obj o)))) (equ? 1) (receive (in-ready? _out-ready?) (posix:file-select in-fd #f 0) (print "in-ready? " in-ready?) (assert in-ready?) ;; (unless in-ready? ;; (print "not ready read:" (read in-port))) ) (equ? 2) (equ? 3) (close-input-port in-port)) (log-info "test OK"))) (foo) )