0x0584
0x0584

Reputation: 258

opening a C program in new terminal window

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

I read this and and I find this line:

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

so when I add it to my code it only open a new terminal window (well that's what he was asking for) but my program runs in the old one.

is there any way to run my program in a new terminal window. and also when the program finish executing, the terminal window get closed like I typed the exit command

Upvotes: 1

Views: 3977

Answers (1)

DaoWen
DaoWen

Reputation: 33019

system("gnome-terminal"); will run the given command, wait for it to exit, and then continue with your program. That's why your program continues to run in the current terminal window.

Rather than trying to do this in C, it probably makes more sense to write a shell script wrapper for your program, and use that script to launch your program in a new terminal window:

#!/bin/bash

gnome-terminal -e ./your-program-name your program arguments

Make the script executable (chmod +x script-name), and then you can run it just like you would a C program. You can even have it forward the arguments from the script to your actual program:

#!/bin/bash

gnome-terminal -e ./your-program-name "$@"

Note that rather than using gnome-terminal (which assumes the user has gnome installed), you can use the more neutral x-terminal-emulator command instead (see How can I make a script that opens terminal windows and executes commands in them?).


If you really want to do this from your C program, then I'd recommend doing something like this:

#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;
}

Using an environment variable (IN_NEW_WINDOW in this case) to check if you've already launched in a new window should make it so that the new window only opens once. Note that the above code assumes a program with only one argument.

However, I still think using the wrapper script is a better solution.

Upvotes: 4

Related Questions