C printf术语进度显示,下一行显示错误消息

C printf术语进度显示,下一行显示错误消息,c,terminal,C,Terminal,对于长时间运行的任务,我希望有一个进度显示。我目前在printf命令的开头使用\33[2K\r,结尾没有换行符或任何东西。我不喜欢这种方法,因为打印到同一终端的消息(例如,没有重定向的stderr)出现在行的末尾,而不是新的 如果我将\r放在进度显示的末尾,其他消息(均以\n结尾)将在视觉上覆盖进度显示,如果长度小于该值,则会与剩余内容混淆。此外,我不想/无法调整打印这些其他消息的行,因为其中一些来自外部库 如果以后我的进度显示会继续显示在新行上,我没有问题,但我希望其他消息会显示在它们自己的行

对于长时间运行的任务,我希望有一个进度显示。我目前在
printf
命令的开头使用
\33[2K\r
,结尾没有换行符或任何东西。我不喜欢这种方法,因为打印到同一终端的消息(例如,没有重定向的stderr)出现在行的末尾,而不是新的

如果我将
\r
放在进度显示的末尾,其他消息(均以
\n
结尾)将在视觉上覆盖进度显示,如果长度小于该值,则会与剩余内容混淆。此外,我不想/无法调整打印这些其他消息的行,因为其中一些来自外部库

如果以后我的进度显示会继续显示在新行上,我没有问题,但我希望其他消息会显示在它们自己的行上(大部分是错误消息,但我正在尝试尽可能优雅地恢复,因此该过程大部分时间都会继续)

有什么想法吗

我不需要可移植性,如果它只在LinuxBash上运行,我也可以

Upd:为了更好地了解我的要求:

目前我可以做:

status1ERR
status2


在最后一个示例中,ERR覆盖了一个完整的状态行-我知道我可以用前面提到的VT100字符序列清除行,但我无法更改某些错误消息,因此它需要始终使用
错误消息\n

哇。这是我过去的一次爆炸

可以使用ANSI或VT100字符序列进行光标定位。 这将允许您在屏幕上分离输出类型。
这是一个很好的起始页:

只需在错误消息的开头使用一个
\n
。当然,如果您调用其他生成stderr输出的代码,则此功能将不起作用。

使用“status,\r\n”打印状态行。然后,使用“光标向上,状态,\r\n”。也考虑过这一点,但如果出现错误,我会用下一个状态自动覆盖它。在这种情况下:(我已经在使用VT100字符序列来擦除该行(在我的问题中;)-因此,虽然您的答案很好,但它并没有回答我的问题:(让我重新表述一下:我将如何使用这些字符序列来完成我要求的任务?在发送输出之前,使用光标向上、向下、向前、向后命令来定位光标。将状态和输出放在屏幕上的不同位置,你应该会很好。是的,这是我想要实现的,但我将如何做到这一点t?正如您在我的示例中所看到的,我已经尝试了我能想到的各种方法,但它们并没有引导我达到想要的行为。这正是问题所在-我无法控制所有错误消息。然后您可以自己捕获stderr,向stdout输出一个
\n
,只是将其回显到原始stderr(肮脏的伎俩).对于这样一个简单的问题来说,听起来有很多麻烦-而且,如果中间的部分可能因为任何原因而失败,那将是它自己的问题。我真的无法想象没有简单的解决方案?
ERRtus1
status2
status1
status2  <--- ERR is overriden by status2 here
status1
ERR
status2
ERR      
status2