1
 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

1 Answer 1

4

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.

Sign up to request clarification or add additional context in comments.

1 Comment

yes, i find that using a shell is quite better. Thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.