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
甚至不能有效地写入鸡?
答案 0 :(得分:5)
我解决了我的问题。 posix
库具有file-read
函数,它可以执行我想要的操作,尽管是在文件描述符上。幸运的是,Chicken中的端口只是文件描述符周围的薄包装器; posix
库中还有一个端口到文件描述符转换器。
有趣的是,这些功能也适用于Windows。 posix
似乎不仅限于POSIX系统。
答案 1 :(得分:2)
正如你所说posix单位是关键,但对于你的问题,似乎更相关的是set-buffering-mode!
这适用于任何端口。