在新终端中打开 C 程序 window
opening a C program in new terminal window
gcc version 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1~14.04)
我阅读了 this 并找到了这一行:
int exit_status = system("gnome-terminal");
所以当我将它添加到我的代码中时,它只会打开一个新终端 window(这就是他所要求的)但是我的程序 运行 在旧终端中。
有什么方法可以 运行 我的程序在新终端 window 中。
并且当程序完成执行时,终端 window 关闭,就像我输入 exit
命令
system("gnome-terminal");
将 运行 给定的命令,等待它退出,然后继续你的程序。这就是为什么你的程序在当前终端 window.
继续 运行
与其尝试在 C 中执行此操作,不如为您的程序编写一个 shell 脚本包装器,并使用该脚本在新终端中启动您的程序 window :
#!/bin/bash
gnome-terminal -e ./your-program-name your program arguments
使脚本可执行 (chmod +x script-name
),然后您就可以 运行 它就像 C 程序一样。您甚至可以让它将参数从脚本转发到您的实际程序:
#!/bin/bash
gnome-terminal -e ./your-program-name "$@"
请注意,您可以使用更中性的 x-terminal-emulator
命令,而不是使用 gnome-terminal
(假设用户已安装 gnome)(参见 How can I make a script that opens terminal windows and executes commands in them? ).
如果您真的想在您的 C 程序中执行此操作,那么我建议您这样做:
#include <stdio.h>
#include <stdlib.h>
char cmd[1024];
int main(int argc, char *argv[]){
// re-launch in new window, if needed
char *new_window_val = getenv("IN_NEW_WINDOW");
const char *user_arg = argc < 2 ? "" : argv[1];
if (!new_window_val || new_window_val[0] != '1') {
snprintf(cmd, sizeof(cmd), "gnome-terminal -e IN_NEW_WINDOW=1 %s %s", argv[0], user_arg);
printf("RELAUNCH! %s\n", cmd);
return system(cmd);
}
// do normal stuff
printf("User text: %s\n", argv[1]);
return 0;
}
使用环境变量(在本例中为 IN_NEW_WINDOW
)检查您是否已经在新的 window 中启动应该可以使新的 window 只打开一次.请注意,上面的代码假设一个程序只有一个参数。
不过,我仍然认为使用包装脚本是更好的解决方案。
gcc version 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1~14.04)
我阅读了 this 并找到了这一行:
int exit_status = system("gnome-terminal");
所以当我将它添加到我的代码中时,它只会打开一个新终端 window(这就是他所要求的)但是我的程序 运行 在旧终端中。
有什么方法可以 运行 我的程序在新终端 window 中。
并且当程序完成执行时,终端 window 关闭,就像我输入 exit
命令
system("gnome-terminal");
将 运行 给定的命令,等待它退出,然后继续你的程序。这就是为什么你的程序在当前终端 window.
与其尝试在 C 中执行此操作,不如为您的程序编写一个 shell 脚本包装器,并使用该脚本在新终端中启动您的程序 window :
#!/bin/bash
gnome-terminal -e ./your-program-name your program arguments
使脚本可执行 (chmod +x script-name
),然后您就可以 运行 它就像 C 程序一样。您甚至可以让它将参数从脚本转发到您的实际程序:
#!/bin/bash
gnome-terminal -e ./your-program-name "$@"
请注意,您可以使用更中性的 x-terminal-emulator
命令,而不是使用 gnome-terminal
(假设用户已安装 gnome)(参见 How can I make a script that opens terminal windows and executes commands in them? ).
如果您真的想在您的 C 程序中执行此操作,那么我建议您这样做:
#include <stdio.h>
#include <stdlib.h>
char cmd[1024];
int main(int argc, char *argv[]){
// re-launch in new window, if needed
char *new_window_val = getenv("IN_NEW_WINDOW");
const char *user_arg = argc < 2 ? "" : argv[1];
if (!new_window_val || new_window_val[0] != '1') {
snprintf(cmd, sizeof(cmd), "gnome-terminal -e IN_NEW_WINDOW=1 %s %s", argv[0], user_arg);
printf("RELAUNCH! %s\n", cmd);
return system(cmd);
}
// do normal stuff
printf("User text: %s\n", argv[1]);
return 0;
}
使用环境变量(在本例中为 IN_NEW_WINDOW
)检查您是否已经在新的 window 中启动应该可以使新的 window 只打开一次.请注意,上面的代码假设一个程序只有一个参数。
不过,我仍然认为使用包装脚本是更好的解决方案。