5

Racket 有很好的read-bytes-async!功能,我相信它存在于世界上所有其他编程语言中。它从输入流中读取它所能读取的内容,没有阻塞,进入缓冲区,返回写入的字节数。

所述功能似乎是有效实现例如 Unixcat工具的绝对必要功能,但 Chicken Scheme 似乎缺乏任何此类功能。当然,我可以使用(read-byte)and (write-byte),但这很慢并且会占用我所有的 CPU。

甚至(copy-port)似乎没有任何这样的实现。相反,在关闭流之前,仅当缓冲区填满时,才逐个缓冲区复制数据。这意味着它(copy-port (current-input-port) (current-output-port))的行为根本不像cat

我只是在阅读文档时遇到了一个可怕的盲点,还是 Chicken 令人震惊地实际上缺乏这样的功能?那么cat在Chicken中甚至不能有效地编写?

4

2 回答 2

5

我解决了我的问题。该posix库具有file-read执行我想要的功能,尽管在文件描述符上。幸运的是,Chicken 中的端口只是文件描述符的薄包装。库中还有一个端口到文件描述符转换器posix

有趣的是,这些功能也适用于 Windows。posix似乎不仅限于 POSIX 系统。

于 2013-11-01T10:33:21.967 回答
2

正如您所说,posix 单元是关键,但对于您的问题, set-buffering-mode似乎更相关!

这适用于任何端口。

于 2013-11-01T23:47:32.837 回答