C++ Unix/C++;:打开新的终端并将输出重定向到它
我的程序(Solaris 10上的C++)从shell启动时,通过wcout将输出写入其终端。但是,当我在Sun Studio中执行它时,或者文件管理器没有终端,输出显示在Sun Studio输出窗口中,或者根本不显示 我希望它在三种情况中的任何一种情况下打开自己的终端窗口,并将wcout连接到此终端窗口。我希望这个程序是C++程序调用的程序本身,而不是程序从某个shell或脚本执行的方式。因为在Studio IDE中执行和在文件管理器中双击仍然具有相同的效果C++ Unix/C++;:打开新的终端并将输出重定向到它,c++,unix,redirect,terminal,stdout,C++,Unix,Redirect,Terminal,Stdout,我的程序(Solaris 10上的C++)从shell启动时,通过wcout将输出写入其终端。但是,当我在Sun Studio中执行它时,或者文件管理器没有终端,输出显示在Sun Studio输出窗口中,或者根本不显示 我希望它在三种情况中的任何一种情况下打开自己的终端窗口,并将wcout连接到此终端窗口。我希望这个程序是C++程序调用的程序本身,而不是程序从某个shell或脚本执行的方式。因为在Studio IDE中执行和在文件管理器中双击仍然具有相同的效果 作为一名Windows程序员,这对
作为一名Windows程序员,这对我来说似乎很自然,但我无法在我的Unix书籍或web中找到这是如何做到的。我的请求是错误的,是真的很难做到还是我遗漏了什么?当你调用你的程序,而不是运行:
myprog123abc
,运行xterm-e myprog123abc
我建议创建一个shell脚本,运行你将程序传递给它执行的终端,然后您应该调用该脚本,而不是从文件管理器调用程序
您的script.sh:
#!/垃圾箱/垃圾箱
xterm-e/path\u to\u your\u program/your\u program
以下内容与您想要的内容非常接近。它仍然有一些bug:
- xterm无法正常关闭(但当程序终止时它会关闭)。我不知道为什么会这样
- 在预期输出之前,输出一个数字。我也不知道为什么
- 我似乎无法重定向输入
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
int pt=posix_openpt(O_RDWR);
如果(pt==-1)
{
std::cerr您希望输出到一个文件(重定向,使用日志API或关闭stdout/将其作为文件重新打开),然后在您选择的终端中使用tail-f
跟踪它
这增加了保存日志输出以供查看的好处,即使终端崩溃/被杀死。使用mknod
在/tmp中创建管道每个linux都有/tmp,每个人都可以使用它
system("mknod /tmp/printing_pipe pipe");
system("qterminal -e tail -f /tmp/printing_pipe");
写到/tmp/printing_pipe
来使用它这是我的谷歌研究带给我的。但是就像我说的,我想从程序而不是从电话中完成。“我请求的东西是错误的吗?”-有点像。命令行工具通常不会创建终端之类的图形实体。通常,它们依赖于更高级别的/以前的实体来为它们创建。这样,它们在SunStudio控制台、xterm、gnome终端、纸质终端等中都能很好地工作。我不熟悉Solaris file manager,但我打赌它有一个特性在他们自己的终端上运行程序。我不确定这是否相关,但它不是一个命令行工具。该程序是一个服务器,与其他两台服务器一起运行以构建应用程序。稍后,它将由一些复杂的远程启动机制启动,我希望它在其t中显示状态信息Terminal用于测试目的。感谢Arkadiy和celtschk.+1。我接受准确回答我问题的方法。但我还将检查简单方法是否更适合Unix的操作方式。
system("mknod /tmp/printing_pipe pipe");
system("qterminal -e tail -f /tmp/printing_pipe");