Ruby跨平台写EOF符号的方式

发布于 2024-07-26 07:05:26 字数 116 浏览 5 评论 0原文

是否有一种独立于平台的方法将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

软糯酥胸 2024-08-02 07:05:26

EOF 不是一个字符,而是一个状态。 终端使用控制字符来表示此状态 (Cd)。 不存在“读取 EOF 字符”这样的事情,而写入一个 EOF 字符也是如此。 如果您正在写入文件,只需在完成后将其关闭即可。 请参阅此邮件列表帖子

听起来您正在考虑 EOF
作为带内但特殊的角色
标记文件结尾的值。 它
最好将其视为
带外哨兵值。 在C语言中,EOF
通常是-1和相关的API
指定整数返回值,以便
EOF 保证永远不会
与有效的带内值混淆。

这里有更多证据(在 Unix 上执行此操作):

$ cat > file
hello^V^Dworld
^D
$ cat file
helloworld

键入 ^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:

It sounds like you are thinking of EOF
as an in-band but special character
value that marks the end of file. It
is better to think of it as an
out-of-band sentinel value. In C, EOF
is usually -1 and the associated API
specifies integer return values so
that EOF is guaranteed to never be
confused with a valid in-band value.

Here's some more proof (do this on Unix):

$ cat > file
hello^V^Dworld
^D
$ cat file
helloworld

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.

孤蝉 2024-08-02 07:05:26

一般情况下没有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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文