Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Unix/C++;:打开新的终端并将输出重定向到它_C++_Unix_Redirect_Terminal_Stdout - Fatal编程技术网

C++ Unix/C++;:打开新的终端并将输出重定向到它

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程序员,这对

我的程序(Solaris 10上的C++)从shell启动时,通过wcout将输出写入其终端。但是,当我在Sun Studio中执行它时,或者文件管理器没有终端,输出显示在Sun Studio输出窗口中,或者根本不显示

我希望它在三种情况中的任何一种情况下打开自己的终端窗口,并将wcout连接到此终端窗口。我希望这个程序是C++程序调用的程序本身,而不是程序从某个shell或脚本执行的方式。因为在Studio IDE中执行和在文件管理器中双击仍然具有相同的效果


作为一名Windows程序员,这对我来说似乎很自然,但我无法在我的Unix书籍或web中找到这是如何做到的。我的请求是错误的,是真的很难做到还是我遗漏了什么?

当你调用你的程序,而不是运行:
myprog123abc
,运行
xterm-e myprog123abc
我建议创建一个shell脚本,运行你将程序传递给它执行的终端,然后您应该调用该脚本,而不是从文件管理器调用程序

您的script.sh:

#!/垃圾箱/垃圾箱

xterm-e/path\u to\u your\u program/your\u program


以下内容与您想要的内容非常接近。它仍然有一些bug:

  • xterm无法正常关闭(但当程序终止时它会关闭)。我不知道为什么会这样
  • 在预期输出之前,输出一个数字。我也不知道为什么
  • 我似乎无法重定向输入
也许其他人知道如何修复这些bug(以及我可能没有注意到的其他bug)

#包括
#包括
#包括
#包括
#包括
#包括
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");