如何在执行C程序期间显示自定义提示?

时间:2014-09-13 06:21:39

标签: c prompt command-line-interface

我试图在Linux中使用C程序模拟终端,并且需要我的程序在程序执行时显示自定义提示。有没有办法使用我的C程序显示它? (我总是可以尝试printf"我的提示"手动每一行,但我正在寻找更好的方法)。此外,我不能使用除基本库之外的任何其他库,因此GNU Readline库和编辑行库将无法工作(如另一个线程中所示)。 例如:

user@mypc:~$ ./a.out
my_custom_prompt>3+5
my_custom_prompt>8
my_custom_prompt>exit
user@mypc:~$

3 个答案:

答案 0 :(得分:2)

我相信OP想要的是简单地将“提示”与任何程序输出一起打印,而不必每次都手动添加。有一种方法可以做到这一点,如果你在printf上编写一个包装函数来执行此操作,并直接调用而不是printf。 这可能会有所帮助:http://www.ozzu.com/cpp-tutorials/tutorial-writing-custom-printf-wrapper-function-t89166.html

答案 1 :(得分:1)

在您的示例中,您已经有了一个终端。您希望使用提示而不是终端编写命令行界面。

  

我总是可以尝试手动打印每行“我的提示”,但我正在寻找更好的方法

这种方法没有错。你有一个循环打印提示,然后等待输入。正如Kunerd在评论中所说,一行代码。

通常情况下,提示会打印到stderr而不是stdout。这样做的好处是,在写入换行符之前出现提示,因为stderr是无缓冲的(并且与管道和重定向结合使用对我来说似乎是合理的,这些东西不会与实际输出)。

  

另外我不能使用除基本库之外的任何其他库,因此GNU Readline库和Editline库不起作用

以严格符合C标准的方式执行此操作,并且不使用任何库,但标准版本使得行编辑(使用退格除外)或命令历史(接近)不可能。如果您没问题,请查看fgets等,请注意,stdin通常是行缓冲的。

POSIX指定终端的一些附加属性,参见例如http://pubs.opengroup.org/onlinepubs/9699919799/。也许curses对您也很感兴趣。

答案 2 :(得分:0)

也许您正在寻找fgets()文档?