linux 清空控制台输出,清除当前的打印控制台行

一些有价值的微妙之处...

\33[2K 删除光标当前所在的整行

\033[A将光标上移一行,但移至同一列,即不移至该行的开头

\r将光标移至行首(r用于快退),但不删除任何内容

具体来说,在xterm中,我尝试了上述答复,发现擦除行并从头开始重新开始的唯一方法是序列(来自@ Stephan202以及@vlp和@mantal的上述注释) \33[2K\r

在实施注意事项上,要使其在例如倒数计时的情况下正常工作,因为我没有'\n' 在每个末尾使用换行符fprintf(),因此我每次都必须进行fflush()流处理(为了给您一些上下文,我开始xterm在Linux机器上使用fork而不重定向stdout,我只是fdfile使用非阻塞文件描述符写入缓冲的FILE指针,而该描述符位于伪终端地址上,在本例中为/dev/pts/21):

fprintf(fdfile, "\33[2K\rT minus %d seconds...", i);

fflush(fdfile);

请注意,我既使用\ 33 [2K序列擦除行,又使用\r倒带序列将光标重新定位在行的开头。我fflush()每次都不得不fprintf()这么做,因为最后没有换行符'\n'。不需要fflush()的相同结果将需要附加的顺序上一行:

fprintf(fdfile, "\033[A\33[2K\rT minus %d seconds...\n", i);

请注意,如果在要写入的行的正上方有行,则第一个fprintf()会覆盖该行。您将不得不在上面多留一行,以便第一行向上移动:

i = 3;

fprintf(fdfile, "\nText to keep\n");

fprintf(fdfile, "Text to erase****************************\n");

while(i > 0) { // 3 second countdown

fprintf(fdfile, "\033[A\33[2KT\rT minus %d seconds...\n", i);

i--;

sleep(1);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值