我已经阅读了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邮件列表,但无济于事。
答案 0 :(得分:0)
我不确定究竟是什么问题。发布的代码没有运行(可能是设置了一个设置了catch-sigint的信号处理程序?),并且不清楚预期的输出是什么,与实际输出相比。