小编for*_*tor的帖子

终端退格的行为

这与退格 ( \b) 字符的行为有关。我有以下 C 程序:

int main() {
    printf("Hello\b\b");
    sleep(5);
    printf("h\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我终端上的输出是

Helho
Run Code Online (Sandbox Code Playgroud)

随着光标前进到下一行的第一个位置。

首先,整个事情只在 5 秒睡眠后打印,因此我推断从内核到终端的输出是行缓冲的。所以现在,我的问题是:

  1. 既然\b\b回退了两个空格,到了 (second) 的位置l,那么和怎么l被替换的差不多ho应该已经被替换了\n。为什么不是?
  2. 如果我删除 line printf("h\n");,它会打印Hello并返回两个字符,而不会擦除。我从其他答案中得到的这是因为非破坏性退格。为什么输入和输出的这种行为不同?也就是说,如果我在终端中输入一些东西(即使是同一个程序)并按 Backspace,它会擦除​​最后一个字符,但不会擦除输出。为什么?

如果有帮助,我在 xterm 终端上的 Ubuntu 系统上使用 bash。

c terminal tty stdio

5
推荐指数
3
解决办法
5787
查看次数

标签 统计

c ×1

stdio ×1

terminal ×1

tty ×1