【发布时间】:2011-12-03 23:26:25
【问题描述】:
我想使用 ncurses 编写一个简单的程序来显示一些数据。然后我希望程序以这样一种方式写入标准输出,然后我可以在命令行上使用管道 (|) 将一些数据输出。
我当前的尝试不起作用。我可以使用“>”在文件中看到“GOT HERE”,但还有很多其他内容。程序也会立即退出。
#include <stdio.h>
#include <ncurses.h>
int main(int _argc, char ** _argv)
{
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
printf("GOT HERE");
endwin(); /* End curses mode */
printf("GOT HERE");
return 0;
}
这是使用>
的最终输出^[[?1049h^[[1;29r^[(B^[[m^[[4l^[[?7h^[[H^[[2JHello World !!!^MGOT HERE^[[29;1H^[[?1049l^M^[[?1l^[>GOT HERE
是否可以同时通过管道和 ncurses 使用stdout?
【问题讨论】:
-
这并不容易,因为ncurses默认使用stdout。所有伪图形均使用特殊符号 (
^[) 完成。您可以尝试 stderr 进行文本输出:fprintf(stderr,....)in program 和./a.out 2>file进行重定向。 -
你真正想做什么?一开始就在管道中拥有一个交互式程序是不寻常的。写入文件或 FIFO 并进行一些小的命令行更改要容易得多。
-
是的。 osgx 说了什么。可能希望通过“tee”命令将他的方法与管道结合起来,以便标准输出进入屏幕以及指定的文件......这对于调试目的可能很有用。如果您使用
a.out 2> named_pipe(其中named_pipe 自然是命名管道),然后在不同终端使用cat named_pipe,您将能够同时看到stdout 和stderr。