2015-01-12 3 views
0

У меня есть простая программа, как этотOpen 2 клеммы с помощью системы() и выберите значение по умолчанию для вывода

int main(void) { 

    system("gnome-terminal"); 
    puts("terminal 1"); 
    system("gnome-terminal"); 
    puts("terminal 2"); 

    return EXIT_SUCCESS; 
} 

во время выполнения: открывает только первый терминал и только тогда, когда я закрываю его программа продолжается, отпечатки консоль и открывает вторую.

Как открыть их оба? (без остановки выполнения моей программы при первом открытии)

Как я могу выборочно печатать на двух терминалах внутри моей программы? (путы («что-то»), на втором терминале)

Благодаря

+1

один из способов: 'система («gnome-terminal &");», которая будет запускать приложение терминала в фоновом режиме (оно все равно будет видимым на экране), и система() будет быстро возвращаться, что позволит вашей программе продолжить. не может помочь в том, как направить stdout на определенный терминал. – user3629249

+0

Почему вы хотите это сделать? И зачем вы хотите программно программировать на выходе «gnome-terminal»? Терминальные эмуляторы типа 'gnome-terminal' не предназначены для этого ! –

+0

@ user3629249 Спасибо! :) - Он также работает с использованием системы («gnome-terminal»), в новой теме. – marmotas

ответ

1

Это невозможно, потому что не system блоки до тех пор, исполняемая программа заканчивается, один из возможных решений является использование fork()

#include <stdio.h> 
#include <unistd.h> 

int main(void) 
{ 
    int i; 

    for (i = 0 ; i < 2 ; ++i) 
    { 
     if (fork() == 0) 
     { 
      printf("terminal %d\n", 1 + i); 
      system("gnome-terminal"); 
     } 
    } 
    return EXIT_SUCCESS; 
} 

если вы хотите познакомиться с исполненной программой, прочитайте popen(). А вы также можете быть заинтересованы в execv() и семье.

+1

Этот ответ неверный - 'system (« gnome-terminal & »)' работает отлично. – user4815162342

+2

Ответ неправильный, а что-то еще работающее - это не то же самое –

+0

@ user4815162342 мой ответ неверен, то, что вы предлагаете, - это одно и то же, а '&' sell будет охватывать новый процесс, используя 'fork () ', поэтому не утверждайте, что мой ответ неверен только потому, что вы его не понимаете. И если вы считаете, что ваш ответ лучше, не стесняйтесь публиковать его, когда я ищу ответы на SO, я прочитал все возможности. –