主机应该回显控制字符吗?哪个?
Should a host echo control characters? Which ones?
我正在构建一个嵌入式系统,该系统将 RS-232 与串行终端通信,"full-duplex" 样式,因此主机会回显终端发送的内容。
我知道打印文件(至少 ASCII 0x20 到 0x7E)通常会被回显,但是在这种情况下,哪些控制字符(如果有的话)通常会被回显?
是否有一些 Posix 或其他标准? Linux是怎么做到的?
例如,如果我在终端输入^C,主机是否应该回显^C? ^G(铃)呢?等等?
我会尝试回答我自己的问题。这是我打算做的事情:
- 回显可打印文件(ASCII 0x20 到 0x7E)。
- CR 回显为 CR LF(因为终端上的 Enter 键通常
发送 CR,ANSI 终端要求 CR 将光标移动到
左,然后 LF 将其移至下一行)。
- BS (backspace, 0x08) 和 DEL (0x7F) 被同等对待并且是
回显为“\b \b”(在 C 语法中)——即 backspace、space、
backspace,擦除终端上的最后一个字符。
所有其他控制字符不回显。 (并不是说它们没有 processed,但它们不会自动回显。它们所做的超出了我要问的范围。)
我的理由是,其余的控制字符通常是为了做某事,而某事是为了在主机上发生,不在航站楼。
例如 DC1/DC3 (^Q/^S) 通常用作流量控制 ("XON/XOFF") - 将 ^S (XOFF) 回显到终端,因为目的是对 host 进行流量控制。将 XOFF 回显到终端将对 终端 进行流量控制,这显然不是预期的结果。所以回应这没有意义。
同样,不应回显终端发送的 ANSI 转义序列(光标 up/down/left/right 等)。
底线 - 仅限 echo 印刷品。通常不应回显控制字符,除非根据其功能 case-by-case 进行回显(回车 return、回车 space 等)。
我想评论一下这是否是正确的做法(以及为什么)。
我正在构建一个嵌入式系统,该系统将 RS-232 与串行终端通信,"full-duplex" 样式,因此主机会回显终端发送的内容。
我知道打印文件(至少 ASCII 0x20 到 0x7E)通常会被回显,但是在这种情况下,哪些控制字符(如果有的话)通常会被回显?
是否有一些 Posix 或其他标准? Linux是怎么做到的?
例如,如果我在终端输入^C,主机是否应该回显^C? ^G(铃)呢?等等?
我会尝试回答我自己的问题。这是我打算做的事情:
- 回显可打印文件(ASCII 0x20 到 0x7E)。
- CR 回显为 CR LF(因为终端上的 Enter 键通常 发送 CR,ANSI 终端要求 CR 将光标移动到 左,然后 LF 将其移至下一行)。
- BS (backspace, 0x08) 和 DEL (0x7F) 被同等对待并且是 回显为“\b \b”(在 C 语法中)——即 backspace、space、 backspace,擦除终端上的最后一个字符。
所有其他控制字符不回显。 (并不是说它们没有 processed,但它们不会自动回显。它们所做的超出了我要问的范围。)
我的理由是,其余的控制字符通常是为了做某事,而某事是为了在主机上发生,不在航站楼。
例如 DC1/DC3 (^Q/^S) 通常用作流量控制 ("XON/XOFF") - 将 ^S (XOFF) 回显到终端,因为目的是对 host 进行流量控制。将 XOFF 回显到终端将对 终端 进行流量控制,这显然不是预期的结果。所以回应这没有意义。
同样,不应回显终端发送的 ANSI 转义序列(光标 up/down/left/right 等)。
底线 - 仅限 echo 印刷品。通常不应回显控制字符,除非根据其功能 case-by-case 进行回显(回车 return、回车 space 等)。
我想评论一下这是否是正确的做法(以及为什么)。