产生一个新终端并写入它的标准输出

时间:2014-07-02 04:05:09

标签: c terminal

我有一个应用程序使用gui来完成与用户的大多数接口。但是,我想有一个单独的终端窗口,我可以写入一些错误检查,原始值等。

我知道我可以使用system()命令生成一个新终端,但我不知道是否可以进行交互。

在最好的情况下,我希望有一个函数,它接受一个字符串(我知道的char数组......),然后将它打印到新生成的控制台窗口:

类似的东西:

int func(char *msg) {
    static // initiate some static interface with a newly spawned terminal window.

    // check if interface is still valid

    // send data to terminal

    return 0; //succes

}

2 个答案:

答案 0 :(得分:2)

  1. 打开烟斗。
  2. 叉。
  3. 在子进程中,关闭写入结束,并exec结束xterm正在运行的cat /dev/fd/<rdfd>
  4. 在父进程中,关闭读取结束并写入写入结束。
  5. #include <stddef.h>
    #include <stdlib.h>
    #include <string.h>
    #include <limits.h>
    #include <unistd.h>
    
    int main(int argc, char **argv) {
        (void)argc, (void)argv;
    
        int fds[2];
        if(pipe(fds) == -1) {
            abort();
        }
    
        int child_pid = fork();
        if(child_pid == -1) {
            abort();
        }
    
        if(child_pid == 0) {
            close(fds[1]);
            char f[PATH_MAX + 1];
            sprintf(f, "/dev/fd/%d", fds[0]);
            execlp("xterm", "xterm", "-e", "cat", f, NULL);
            abort();
        }
    
        close(fds[0]);
        write(fds[1], "Hi there!\n", sizeof("Hi there!\n"));
        sleep(10);
        close(fds[1]);
        sleep(3);
    
        return EXIT_SUCCESS;
    }
    

    您可以使用fdopenfds[1]转换为可以使用FILE *等的fprintf

答案 1 :(得分:0)

好吧,想象一下终端 你的主要输出设备的场景(例如tty [n]),如何打开一个&#34; new&#34;那么终端呢?

您可以在图形DE中打开多个终端的唯一原因是它们是终端模拟器。您需要启动另一个终端仿真器并使用套接字或共享内存等内容写入标准输出。