【问题标题】:Clearing a terminal similar to man page using C使用 C 清除类似于手册页的终端
【发布时间】:2012-12-07 20:03:48
【问题描述】:

我想读取一个文本文件并显示它。但我需要在终端上打印它,类似于手册页(linux)。也就是说,向上滚动时不应超出第一行,向下滚动不应超出最后一行。我只能用 C 语言编写它。我不应该使用任何工具。我目前单独清除终端的编码是,

#include<stdio.h>

main()
{
printf("\033[2J");
printf("\033[0;0f");
FILE *ffp;
char c;

ffp=fopen("help.txt","r");
while((c=getc(ffp))!=EOF)
    printf("%c",c);
}

请指导我。提前致谢。

更新:

main()
{
FILE *ffp;
char c;


ffp=fopen("help.txt","r");

FILE *less = popen("less", "w");
while ((c = getc(ffp)) != EOF) {
  fputc(c, less);
}
}

【问题讨论】:

  • 只有我在想ncurses吗?
  • 不,你并不孤单!
  • @maverik 是的。但它是一个预定义的工具。我需要对其进行编程,因为我使用 C 代码清除了终端。
  • 这是作业吗?在现实生活中,您会使用less(或PAGER 环境变量中设置的任何内容)。这里从来不需要 C(这违背了 UNIX 精神)使用 C 来完成这项任务。
  • @AlexandreC。是的。这是我项目的一部分。我会尝试 PAGER 环境变量。谢谢。

标签: c linux manpage


【解决方案1】:

试试这样的,

#include <stdio.h>

int
main ()
{
    fputs("output1\n",stdout);
    fputs("output2\n",stdout);
    fputs("\033[A\033[2K\033[A\033[2K",stdout);
    rewind(stdout);
    ftruncate(1,0); /* you probably want this as well */
    fputs("output3\n",stdout);
    fputs("output4\n",stdout);
    return 0;
}

来源: Clearing output of a terminal program Linux C/C++

【讨论】:

  • 我已经查看了该答案。它只清除前两行。我的编码甚至清除了整个屏幕!
  • 谢谢。但是清除不是问题,我已经可以使用我的代码完成。我希望它类似于手册页。请再次阅读我的问题。
【解决方案2】:
FILE *less = popen("less", "w");
while ((c = getc(ffp)) != EOF) {
  fputc(c, less);
}

moreless 是实现滚动文件或一次通过管道传输一屏的程序。

【讨论】:

  • 谢谢。我应该少用什么头文件?我收到一个未声明的变量错误。
  • 我已经添加了声明。您不能在手册页中查找popen() 吗?
  • 谢谢和抱歉。但该文件没有得到显示。我已经更新了有问题的代码。
  • less 程序是否在您的$PATH 中?
  • 如果我使用“更多”,它会显示文件。但这没有什么区别。它仍然可以向上滚动以查看终端的剩余部分!
猜你喜欢
  • 2015-10-19
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2012-04-23
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
相关资源
最近更新 更多