如何真正清空Linux终端的已显示Buffer

本文介绍了一个简化版的程序,该程序使用ncurses库来实现类似于reset命令的功能,通过设置终端属性并发送重置字符串来使终端恢复到初始状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把代码先贴上来先. 参考ncurses-5.9/progs/tset.c简化, 能实现和"reset"命令一样的功能. 

ncurses包位置: http://www.gnu.org/software/ncurses/

#include <stdio.h>
#include <stdlib.h> //  getenv
#include <unistd.h> //  STDOUT_FILENO
#include <term.h>   //  TTY definition

#define KTRUE  1
#define KFALSE 0
#define reset_1string                  CUR Strings[122]
#define reset_2string                  CUR Strings[123]

static inline int outc(int c) { return putc(c, stderr); }

int main(void)
{
    struct termios mode, oldmode;
    char *ttype, *p;

    if (tcgetattr(2, &mode) < 0) {
        printf("standard error.\n");
        goto EXIT;
    }
    oldmode = mode;

    tcsetattr(2, 1, &mode);

    if ((ttype = getenv("TERM")) == NULL)
        goto EXIT;

    if (ttype[0] == '?')
        goto EXIT;

    if (setupterm(ttype, STDOUT_FILENO, (int*)0) != 0)
        goto EXIT;

    if ((p = reset_1string) != 0) {
        tputs(p, 0, outc);
    }
    if ((p = reset_2string) != 0) {
        tputs(p, 0, outc);
    }

    if (memcmp(&mode, &oldmode, sizeof(mode))) {
        tcsetattr(2, 1, &mode);
    }

    return KTRUE;

EXIT:
    return KFALSE;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值