我正在使用一些图形引擎来处理gtk窗口(Opencv/highgui)的C和C++应用程序。这个应用程序做一些小输出到标准输出/ cout。从应用程序打开控制台
在Windows上,从桌面启动这种应用程序会自动打开一个控制台,向用户显示标准输出上写有“printf()”或“std :: cout”的内容。
在Linux上,如果我从以前打开的控制台启动它,没有问题。但是,如果我通过桌面启动它(双击),那么linux不会打开关联的控制台,并且写在stdout/cout上的数据将丢失。 似乎这是Linux(?)上的正常行为。
我想从我的应用程序自动打开一个控制台,当在Linux平台上编译。
这看起来像是一个骗局this one,重点是,它不起作用!我现在下面的代码:
#ifndef __WIN32
filebuf* console = new filebuf();
console->open("/dev/tty", ios::out);
if(!console->is_open())
cerr << "Can't open console" << endl;
else
cout.ios::rdbuf(console);
#endif
我不断收到“无法打开控制台”(CERR使用freopen函数()在一个文件重定向)。我试图更换控制台名称:
console->open("/dev/console", ios::out);
但这并没有改变。
我在正确的方向吗?接下来我可以尝试什么?我应该尝试打开专门的终端应用程序(xterm)吗?但是,那么,我怎样才能将该控制台与我的应用“连接”?
嗯..我知道在某些桌面环境(至少GNOME)中,您可以在桌面上创建启动程序(Windows中的“快捷方式”),并指定从其启动的应用程序将与关联的终端一起运行。如果你想尝试,创建一个新的启动器,然后检查它的属性 - 你会在那里找到选项。不知道这是不是你想要的。 – Jonatan
@kebs如果您在图形环境(如gnome终端)下的终端中运行应用程序,您将能够看到输出到终端并打开应用程序。 – ShinTakezou
@fullhack:是的,我知道,但这不是一种选择。 – kebs