尽管输出流量保持及时

尽管输出流量保持及时

简洁版本

>我可以在终端底部保留一个输入符号(例如),以便用户可以输入,尽管上面有文本流动?

长版

我正在制作一个多进程应用程序,基本上处理文本流(在不久的将来将使用 telnet 输入和输出)。我用 printf 放了一个提示符号>,告诉用户他可以写。但如果有些孩子对之前的输入回答得有点晚,输出是在提示之后写的,即使技术上仍然有效,但不太实用。

有没有办法保持一个空行并提示输入,即使文本在上面“滚动”?

答案1

您可以创建一个包装对象来序列化所有输出流。您可能需要互斥体来同步它。

然后,您可以在每个子进程输出后打印“>”,这样最后一行将始终是“>”。

答案2

对于非常简单的版本,即“始终在最近的输出行之后维护提示行”,您可以执行诸如始终输出之类的操作"\routput here\n> "(覆盖最近的提示行,写入输出,然后写入新的提示行)。如果您希望用户能够在新的输出行中保留他们的输入,您需要做一些类似于readline/libedit的事情。 (实际上可能有一个选项可以做到这一点;我不确定。)一般过程是进入 cbreak/raw 模式,维护用户输入内容的内存缓冲区,然后输出它每当您写入新的输出行时,请在提示后再次执行此操作。

相关内容