【发布时间】: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