【问题标题】:How to keep stdin and stdout separated when printing output?打印输出时如何保持标准输入和标准输出分开?
【发布时间】:2016-03-04 03:54:13
【问题描述】:

考虑以下每隔几秒输出一些文本的代码:

int main (void)
{
    int status = 0;
    if (fork() == 0)
    {
        while (1)
        {
            printf ("whatever...\n");
            // printf ("\rwhatever...\n");
            sleep (3);
        }
    }
    while (wait (&status) > 0);
    return 0;
}

我遇到的问题是,如果我已经在终端中输入了一些文本,则输出的文本将被添加到输入缓冲区的末尾,例如:

> whatever...
< something
> somethingwhatever...
<

如何让它打印输出缓冲区并同时保持输入缓冲区完整,例如:

> whatever...
< something
> whatever...
< something

【问题讨论】:

  • 恐怕您必须使用一些进程间锁定机制(例如信号量)。
  • 这不是微不足道的,需要更多关于你的程序如何处理输入的信息。你在使用readline之类的东西吗?扫描? std::cin?
  • 流没有混合。这是您的控制台输出。禁用回显并按顺序打印输入和输出。
  • @JonasWielicki 我正在创建一个类似命令的界面,并希望使用 readline 来读取输入。
  • @razzak:我不会。因为您的问题缺乏信息,任何全面的答案对于本网站来说都太长了。你有一些关键词,所以你可以自己挖掘。无论如何你都需要这些知识,所以请学习钓鱼,而不仅仅是如何吃鱼。

标签: c shell unix stdout stdin


【解决方案1】:

如果您依赖终端提供的标准 I/O 处理,则无法控制这方面。

您可以做的是手动处理此问题。您可以使用tputncurses将输入和输出分成两列,也可以关闭输入回显(输入不会显示)并自己显示输入。

第二种方法的问题是它很可能会让用户感到困惑。

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 2021-10-20
    • 2013-09-18
    • 1970-01-01
    • 2013-06-13
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多