| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.14.10.8 Binary Input
R6RS binary input ports can be created with the procedures described below.
- Scheme Procedure: open-bytevector-input-port bv [transcoder]
- C Function: scm_open_bytevector_input_port (bv, transcoder)
Return an input port whose contents are drawn from bytevector bv (see section Bytevectors).
The transcoder argument is currently not supported.
- Scheme Procedure: make-custom-binary-input-port id read! get-position set-position! close
- C Function: scm_make_custom_binary_input_port (id, read!, get-position, set-position!, close)
Return a new custom binary input port(13) named id (a string) whose input is drained by invoking read! and passing it a bytevector, an index where bytes should be written, and the number of bytes to read. The
read!procedure must return an integer indicating the number of bytes read, or0to indicate the end-of-file.Optionally, if get-position is not
#f, it must be a thunk that will be called when port-position is invoked on the custom binary port and should return an integer indicating the position within the underlying data stream; if get-position was not supplied, the returned port does not support port-position.Likewise, if set-position! is not
#f, it should be a one-argument procedure. When set-port-position! is invoked on the custom binary input port, set-position! is passed an integer indicating the position of the next byte is to read.Finally, if close is not
#f, it must be a thunk. It is invoked when the custom binary input port is closed.Using a custom binary input port, the
open-bytevector-input-portprocedure could be implemented as follows:(define (open-bytevector-input-port source) (define position 0) (define length (bytevector-length source)) (define (read! bv start count) (let ((count (min count (- length position)))) (bytevector-copy! source position bv start count) (set! position (+ position count)) count)) (define (get-position) position) (define (set-position! new-position) (set! position new-position)) (make-custom-binary-input-port "the port" read! get-position set-position!)) (read (open-bytevector-input-port (string->utf8 "hello"))) ⇒ hello
Binary input is achieved using the procedures below:
- Scheme Procedure: get-u8 port
- C Function: scm_get_u8 (port)
Return an octet read from port, a binary input port, blocking as necessary, or the end-of-file object.
- Scheme Procedure: lookahead-u8 port
- C Function: scm_lookahead_u8 (port)
Like
get-u8but does not update port’s position to point past the octet.
- Scheme Procedure: get-bytevector-n port count
- C Function: scm_get_bytevector_n (port, count)
Read count octets from port, blocking as necessary and return a bytevector containing the octets read. If fewer bytes are available, a bytevector smaller than count is returned.
- Scheme Procedure: get-bytevector-n! port bv start count
- C Function: scm_get_bytevector_n_x (port, bv, start, count)
Read count bytes from port and store them in bv starting at index start. Return either the number of bytes actually read or the end-of-file object.
- Scheme Procedure: get-bytevector-some port
- C Function: scm_get_bytevector_some (port)
Read from port, blocking as necessary, until data are available or and end-of-file is reached. Return either a new bytevector containing the data read or the end-of-file object.
- Scheme Procedure: get-bytevector-all port
- C Function: scm_get_bytevector_all (port)
Read from port, blocking as necessary, until the end-of-file is reached. Return either a new bytevector containing the data read or the end-of-file object (if no data were available).
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on February 3, 2012 using texi2html 5.0.
