c - 在新终端窗口中打开 C 程序

标签 c linux ubuntu terminal system

 gcc version 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1~14.04) 

我读了this并且我找到了这一行:

int exit_status = system("gnome-terminal");

所以当我将它添加到我的代码中时,它只会打开一个新的终端窗口(这正是他所要求的),但我的程序在旧终端窗口中运行。

有什么方法可以在新的终端窗口中运行我的程序。 并且当程序完成执行时,终端窗口关闭,就像我键入 exit 命令

最佳答案

system("gnome-terminal"); 将运行给定的命令,等待它退出,然后继续您的程序。这就是您的程序继续在当前终端窗口中运行的原因。

与其尝试在 C 中执行此操作,不如为您的程序编写一个 shell 脚本包装器,并使用该脚本在新的终端窗口中启动您的程序:

#!/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 命令代替(请参阅 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)检查您是否已经在新窗口中启动应该使新窗口只打开一次。请注意,上面的代码假定一个程序只有一个参数。

但是,我仍然认为使用包装器脚本是更好的解决方案。

关于c - 在新终端窗口中打开 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798690/

相关文章:

c - 为什么我的代码不能用 libpcap 编译?

c - 在C中,如何将存储在变量中的多单词字符串分解为数组,每个单词保存一个数组值

c - 可以使用枚举来限制 c 整数范围吗?

linux - 如何将 MCP23017 与 MCP3008 一起用于 Raspberry Pi 的 I2C 电压传感器?

Java错误: java -v command throws errors

ubuntu - 终结者终端水平滚动

c - 递增 float 组指针

c - 使用 void 在 C 中分配和释放二维数组

c# - 从 C# 调用 Flash 方法 (MONO)

windows - Wine 的对立面是什么?