打印控制台页面后,如何暂停我的C程序?

时间:2018-12-04 09:59:48

标签: c assembly prompt dump

我正在使用基本的SIC汇编程序,而我正在尝试实现的功能之一是在转储功能期间,如果程序在控制台上生成的文本超过一页,它将提示用户在继续操作之前按一个键。

我的转储函数读取内存中地址范围的十六进制值。

2 个答案:

答案 0 :(得分:3)

首先,您需要定义“页面”是什么。然后,您将知道有多少行可用。然后在打印时,您停止输入每X行(其中X是每页的行数),然后继续打印下X行。

由于读取输入将一直阻塞,直到用户按 Enter 键(通常),然后您的程序才会暂停。

答案 1 :(得分:1)

在POSIX系统上,最简单的方法是通过more传递其输出。或在拥有less的系统上。

FILE *outfd = popen("less", "w"); ,并使用它代替stdoutpopen(3)由POSIX指定。 more也是如此,但您可能想先尝试less。或更妙的是,使用getenv("PAGER"),然后退回到more

让另一个程序弄清楚终端的处理方式,而不是尝试自己动手做。

某些非POSIX系统,例如Windows,也可以使用寻呼程序。我认为Windows甚至有一个more程序,但是IDK如果它在cygwin之外的任何标准库中都有一个popen函数。


要将stdout重定向到管道,可以使用更多低级的POSIX函数,例如dup2(例如,在SO上搜索)。

但是我不认为仅靠popen就可以轻而易举地做到这一点。在GNU C库(glibc)中,您可以分配给stdout,例如stdout = popen(...);

但是其他C实现可能不支持:stdout可以是不支持分配给它的宏。 (See the glibc manual's Standard Streams page。)