繁体   English   中英

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

[英]opening a C program in new terminal window

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

我读了这篇文章 ,发现以下行:

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命令(而不是使用gnome-terminal (假定用户已安装gnome))(请参阅 ) 。


如果您真的想从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 )来检查您是否已经在新窗口中启动,应该这样做,以便新窗口仅打开一次。 请注意,上面的代码假定程序只有一个参数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM