非阻塞(异步)i / o,Chicken Scheme

时间:2014-04-04 04:34:12

标签: asynchronous io signals chicken-scheme

我已经阅读了Buffered I/O in Chicken Scheme问题,但它似乎无法回答这个问题。 提供了一种以异步方式读取文件的方法,但是,当您从{{1}读取时,这并不能很好地工作尝试处理中断信号。

如上所述使用时会产生此错误:

STDIN

我尝试了一点点异常处理,但我真的没有时间做这类事情。我只是希望能够进行非阻塞,即STDIN上的缓冲I / O,以便当用户按下 Ctrl - c 时,我的应用程序是挂起(模拟阻塞i / o而不实际阻塞)他们不必按 enter 以便识别中断信号。

目前,我能够立即从Error: (file-read) cannot read from file - Interrupted system call 处理STDIN阅读,并且我能够从SIGINT读取并输入的文字打印到终端就像STDIN一样,但我似乎无法两个
注意第一种方法 acutally 能够从cat读取然后将收到的任何输入打印到STDIN,但需要额外的输入按键,以便打印输入。

以下是可以立即从STDOUT处理STDIN读取的代码:

SIGINT

以下是我可以从(define (read-from-stdin) (do ((c (and (char-ready?) (read-char)) (and (char-ready?) (read-char)))) ((or caught-sigint (eof-object? c))) (when (not-null? c) (display c)))) ;; without this line, function prints #f non-stop 直接打印到STDIN的代码:

STDOUT


我搜索Chicken Scheme's Wiki 多次次,试图找到一种做非阻塞i / o的方法,我甚至查阅了Chicken邮件列表,但无济于事。

1 个答案:

答案 0 :(得分:0)

我不确定究竟是什么问题。发布的代码没有运行(可能是设置了一个设置了catch-sigint的信号处理程序?),并且不清楚预期的输出是什么,与实际输出相比。