【问题标题】:\033 Prompt in unix\033 在 unix 中提示
【发布时间】:2013-03-28 23:30:28
【问题描述】:

我编写了一个从缓冲区打印一行的信号处理程序,它首先删除前一个提示,打印一行并在​​屏幕末尾再次打印提示。这是我的处理程序。

void print(int param)
{
  int c;
  signal(SIGALRM, print);
  printf("\b\b\b\b\b\b\b\b\b\b\033[0K");
  print_line();
  printf("\033[7m--HEY--\033[0m");
}

这个处理程序正在做我想做的一切,除了我在屏幕末尾看不到提示。我不明白为什么我看不到那个提示?

【问题讨论】:

  • 您在打印的内容中有null 转义序列。为什么?
  • 因为我在进入这个循环之前打印了一个提示,所以我想先删除它,然后在打印该行后再次打印。
  • \b 是退格转义。我说的是你在哪里有\0。我很确定这最终是一个null 字节。除非编译器将其解释为八进制转义序列\033
  • @EricUrban 确实是八进制转义序列。
  • 严格来说,您不应在信号处理程序中使用printf()(或fflush())(但write() 可以)。

标签: c unix signals terminal-emulator


【解决方案1】:

标准输出通常是行缓冲的。以\n 字符结尾,或者像这样显式刷新:

fflush(stdout);

【讨论】:

  • 我会使用 fflush(stdout) 来避免改变行为。
  • 非常感谢,帮了大忙。
猜你喜欢
  • 2019-09-04
  • 2022-11-04
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2014-11-23
  • 2016-02-21
相关资源
最近更新 更多