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:我不会。因为你的问题缺乏信息,任何全面的答案对这个网站来说都太长了。你有一些关键词,所以你可以挖掘自己。无论如何,你都需要这些知识,所以请学习钓鱼,而不仅仅是如何吃鱼。