POSIX 是否定义了将 NUL 发送到终端时的行为



这是一个将ASCII NUL作为输出发送的Perl程序:

print "helloworld"

以下是从shbash运行此类程序的方法:

perl -e 'print "helloworld"'

在 Mac OS X 10.11.2 上,这将生成可见输出:

helloworld

但是,此行为对于所有符合 POSIX 标准的终端仿真器是否一致?(例如,与将 NUL 打印为新行或崩溃相反?

不,这不能保证;正如Chepner在对该问题的评论中指出的那样,POSIX规范没有定义终端仿真器行为。确实存在标准终端协议ECMA-48,但现代操作系统统一支持标准定义的各种终端协议。

某些终端打印本地字体为代码点提供的任何字符(U+0000有效的代码点)。


顺便说一下,ECMA-48 终端标准(用于 ANSI 终端 - 同样,并非所有终端都需要符合 ANSI 标准)对 NUL 字符有以下说明:

8.3.88 空 - 空
表示法:(C0) 代表: 00/00

NUL 用于媒体填充或时间填充。NUL 字符可以插入数据或从数据中删除 流不会影响该流的信息内容,但此类操作可能会影响 信息布局和/或设备控制。

因此,对于 ANSI 终端,为 NUL 打印空格是符合标准的操作(允许在不修改内容的情况下使用 NUL 填充缓冲区),但不需要不声称符合 ECMA-48 的终端类型以相同的方式运行。

最新更新