C \unix中的033提示符

C \unix中的033提示符,c,unix,signals,terminal-emulator,C,Unix,Signals,Terminal Emulator,我编写了一个从缓冲区打印一行的信号处理程序,它首先删除上一个提示,打印一行,然后在屏幕结束时再次打印提示。这是我的经纪人 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"); } 这个处理程序正在做我想做的一切,只是我看不到屏幕末尾的提示。我不明白为

我编写了一个从缓冲区打印一行的信号处理程序,它首先删除上一个提示,打印一行,然后在屏幕结束时再次打印提示。这是我的经纪人

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");
}

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

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

fflush(stdout);

您正在打印的内容中有
null
转义序列。为什么?因为我在进入此循环之前打印提示,所以我想先删除该提示,然后在打印行后再次打印。
\b
是退格转义。我说的是你有
\0
的地方。我很确定它最终是一个
null
字节。除非编译器将其解释为八进制转义序列,否则它确实是一个八进制转义序列。严格来说,您不应该从信号处理程序中使用
printf()
(或
fflush()
)(但是
write()
就可以了)。我会使用fflush(stdout)来避免改变行为。非常感谢,这很有帮助。