aboutsummaryrefslogtreecommitdiff
path: root/Examples/guile/port/port.scm
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/guile/port/port.scm')
-rw-r--r--Examples/guile/port/port.scm32
1 files changed, 32 insertions, 0 deletions
diff --git a/Examples/guile/port/port.scm b/Examples/guile/port/port.scm
new file mode 100644
index 000000000..68e9b8e85
--- /dev/null
+++ b/Examples/guile/port/port.scm
@@ -0,0 +1,32 @@
+;; Call with standard output
+(print-int (current-output-port) 314159)
+
+;; Redirection to a file. Note that the port is automatically flushed
+;; (via force-output) before calling the C function, and that the C
+;; function gets a temporary "FILE" stream, which is closed after the
+;; call. So you can simply mix Scheme and C output.
+(with-output-to-file "test.out"
+ (lambda ()
+ (display 4711)
+ (newline)
+ (print-int (current-output-port) 314159)
+ (display 815)
+ (newline)))
+
+;; Redirection to a string or soft port won't work --
+;; we can only handle file ports.
+(catch #t
+ (lambda ()
+ (with-output-to-string
+ (lambda ()
+ (print-int (current-output-port) 314159))))
+ (lambda args
+ (write args) (newline)))
+
+;; Read from a file port. Note that it is a bad idea to mix Scheme and
+;; C input because of buffering.
+(with-input-from-file "test.out"
+ (lambda ()
+ (display (read-int (current-input-port)))
+ (newline)))
+