输入端口与文件

Input Port vs file

Scheme是input port the same thing as a C FILE* or a python file? Is that the same thing as the unix file descriptor概念吗?如果不是,输入端口与其他输入端口有何不同(为什么它这样称呼而不仅仅是 'file')?

它近似,但仅近似等效:端口是对象,您可以写入或读取其他对象:字节或字符(通常)。

但近似值并不是非常接近。您可以从中读取或写入 个字符 而不是字节的端口是处理字符的端口。这意味着在他们可以,例如,在端口下的 TCP 连接上写下一些八位字节之前,他们必须使用(幸运的)一些标准编码将这些字符转换为八位字节。我认为控制这种编码和解码的机制在Scheme中没有规定,但它必须存在。所以端口至少在某些时候是一件复杂的事情。

(至于为什么叫它们 'ports':好吧,C 选择调用通信端点 'file descriptors',这在 Unix“一切皆文件”思想的上下文中是有意义的(尽管调用 bytes chars 总是一个错误。但 Scheme 并非来自 Unix/C 背景,所以真的没有理由这样做。鉴于我们在 TCP/IP 中调用通信端点, 'port' 似乎是个不错的名字。)