鸡计划中的缓冲I / O?

时间:2013-11-01 00:08:30

标签: scheme racket chicken-scheme

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

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

即使(copy-port)似乎也没有任何此类实施。相反,在关闭流之前,仅在缓冲区填充时才逐个缓冲地复制数据。这意味着(copy-port (current-input-port) (current-output-port))的行为与cat完全不同。

我只是在阅读文档时遇到了一个可怕的盲点,或者鸡真的缺乏这样的功能吗?那么cat甚至不能有效地写入鸡?

2 个答案:

答案 0 :(得分:5)

我解决了我的问题。 posix库具有file-read函数,它可以执行我想要的操作,尽管是在文件描述符上。幸运的是,Chicken中的端口只是文件描述符周围的薄包装器; posix库中还有一个端口到文件描述符转换器。

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

答案 1 :(得分:2)

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

这适用于任何端口。