Ruby跨平台写EOF符号的方式
是否有一种独立于平台的方法将 EOF 符号写入 Ruby 中的字符串。 在 *nix 中,我相信该符号是 ^D
,但在 Windows 中是 ^Z
,这就是我问的原因。
Is there a platform-independent way of writing the EOF
symbol to a string in Ruby. In *nix I believe the symbol is ^D
, but in Windows is ^Z
, that's why I ask.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
EOF 不是一个字符,而是一个状态。 终端使用控制字符来表示此状态 (Cd)。 不存在“读取 EOF 字符”这样的事情,而写入一个 EOF 字符也是如此。 如果您正在写入文件,只需在完成后将其关闭即可。 请参阅此邮件列表帖子:
这里有更多证据(在 Unix 上执行此操作):
键入 ^V^D 会按字面意思将 control-D 字符插入到文件中。 输入 world 并回车后,^D 关闭管道。 该文件最终长 12 个字节,包含 10 个字母,另外两个字母用于 ^D 和换行符。 最后的 ^D 不会出现在文件中。 它仅被终端/外壳用来关闭管道。
EOF is not a character, it's a state. Terminals use control characters to represent this state (C-d). There's no such thing is "reading a EOF character" and same thing for writing one. If you're writing to a file, just close it when you're done. See this mailing list post:
Here's some more proof (do this on Unix):
Typing ^V^D inserts a control-D character literally into the file. After typing world and enter, the ^D closes the pipe. The file ends up being 12 bytes long 10 letters, two more for the ^D and the newline. The final ^D does not end up in the file. It's just used by the terminal/shell to close the pipe.
一般情况下没有EOF字符。 也就是说,对此没有跨平台解决方案,即使在特定平台上,对此类角色的处理也纯粹是遗留的且不一致。 您可以通过关闭文件来结束文件。
然而,迂腐地说,某些操作系统在以某些模式读取文件时确实支持文件结尾字符。 例如,如果您在 Windows 下运行并使用 C stdio API 以文本模式读取文件,则文字 control-Z(字符代码 26)将向 stdio 发出文件结束信号。 这是 MS-DOS 的遗留物,也是 CP/M 的遗留物。 如果您使用 stdio 并以二进制模式读取文件,则 control-Z 将不会结束文件。
尽管如此,您应该只将其视为“知道,不要使用”功能。 如果您在 Windows 上看到过截断的输入/输出,您会想了解它,但使用它是疯狂的。
In general there is no EOF character. That is, there's no cross-platform solution to this and even on specific platforms the handling of such a character is purely legacy and inconsistent. You end a file by closing it.
However, to be pedantic, certain operating systems when reading files in certain modes do support a literal end of file character. For example, if you're running under Windows and use the C stdio API to read a file in text mode then a literal control-Z (character code 26) will signal end of file to stdio. This is a holdover from MS-DOS which it has as a holdover from CP/M. If you use stdio and read the file in binary mode then the control-Z will not end the file.
Nevertheless, you should only think of it as "know, don't use" feature. You'll want to know about it if you ever see trucated input/output on Windows, but using it is madness.