如何在打印输出时保持stdin和stdout分离?

时间:2015-11-30 13:33:00

标签: 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 (&status) > 0);
    return 0;
}

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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