使用system()打开2个终端并选择默认输出

时间:2015-01-12 21:49:40

标签: c linux gnome-terminal

我有一个像这样的简单程序

int main(void) {

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

    return EXIT_SUCCESS;
}

在运行时: 仅打开第一个终端,只有当我关闭程序时,程序才会继续,在控制台中打印并打开第二个终端。

我如何打开它们? (当第一个打开时,不停止我的程序执行)

如何在程序内部的两个终端中有选择地进行打印? (放("东西");在第二个终端)

谢谢

1 个答案:

答案 0 :(得分: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()和家人感兴趣。