6 ruby string cross-platform eof
是否有一种独立于平台的方式将EOF符号写入Ruby中的字符串.在*nix我相信符号是^D,但在Windows中^Z,这就是我问的原因.
Mar*_*osi 16
EOF不是一个角色,它是一个国家.终端使用控制字符来表示此状态(Cd).没有这样的东西是"读一个EOF 角色 "和写一个相同的东西.如果您要写入文件,请在完成后关闭它.查看此邮件列表帖子:
听起来你正在考虑将EOF作为带内但特殊的字符值来标记文件的结尾.最好将其视为带外哨兵价值.在C中,EOF通常为-1,关联的API指定整数返回值,以保证EOF永远不会与有效的带内值混淆.
这里有一些证据(在Unix上这样做):
$ cat > file
hello^V^Dworld
^D
$ cat file
helloworld
Run Code Online (Sandbox Code Playgroud)
键入^ V ^ D将控制字符字面插入文件中.键入world并输入后,^ D将关闭管道.该文件最终为12个字节长10个字母,另外两个用于^ D和换行符.最终^ D不会在文件中结束.它只是被终端/ shell用来关闭管道.
通常没有EOF字符.也就是说,没有跨平台解决方案,即使在特定平台上,这种角色的处理纯粹是遗留的和不一致的.您通过关闭它来结束文件.
但是,为了迂腐,某些操作系统在某些模式下读取文件时确实支持文件结尾字符.例如,如果您在Windows下运行并使用C stdio API以文本模式读取文件,则文字控件-Z(字符代码26)将向文件结束发送信号到stdio.这是来自MS-DOS的保留,它作为CP/M的保留.如果您使用stdio并以二进制模式读取文件,则control-Z将不会结束该文件.
不过,您应该只将其视为"知道,不使用"功能.如果你在Windows上看到trucated输入/输出,你会想知道它,但使用它是疯狂的.