C 打印输出时如何保持标准输入和标准输出分开?

C 打印输出时如何保持标准输入和标准输出分开?,c,shell,unix,stdout,stdin,C,Shell,Unix,Stdout,Stdin,考虑以下每隔几秒钟输出一些文本的代码: int main (void) { int status = 0; if (fork() == 0) { while (1) { printf ("whatever...\n"); // printf ("\rwhatever...\n"); sleep (3); } } while (wait (

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

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
>随便什么。。。
<
>不管怎样。。。
<

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

你能做的就是手动处理这个问题。您可以使用
tput
ncurses
将输入和输出分成两列,也可以关闭输入回显(输入将不显示)并自己显示输入


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

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