如何在linux下通过C程序打开新终端
我编写了客户端 – 服务器代码,我有很多连接,假设每个节点代表同一台机器上的不同进程.要做到这一点,我显然使用fork().
但现在问题是所有结果都显示在同一个终端上. P.S:我已经尝试过系统(“gnome-terminal”),但它只是打开了新终端,但所有结果只在同一终端上显示.所有新的终端都只是打开并保持空白而没有任何结果. 此外,我已经通过这个链接How to invoke another terminal for output programmatically in C in Linux,但我不想用参数或其他任何东西运行我的程序.它应该像./test一样 这是我的代码: – for(int i=0;i<node-1;i++) { n_number++; usleep(5000); child_pid[i]=fork(); if(!child_pid[i]) { system("gnome-terminal"); file_scan(); connection(); exit(0); } if(child_pid[i]<0) printf("Error Process %d cannot be created",i); } for(int i=0;i<node-1;i++) wait(&status); 基本上我想要的是每个进程应该有新的终端只显示进程信息或结果. 我到底想要什么: >在fork()之后,我有一些与说明进程1有关的数据,然后我希望它的输出到一个终端 我知道使用IPC(进程间通信)可以做到这一点,但还有其他办法吗?我的意思是只有2-3个命令?因为我不想在编写这部分时投入太多资金. 提前致谢!!! 解决方法
也许你想要那样的东西.该程序使用unix98伪终端(PTS),它是主站和从站之间的双向通道.因此,对于您执行的每个fork,您将需要通过调用triad posix_openpt,grantpt,masterpt的unlockpt和slave端的ptsname来创建新的PTS.不要忘记更正每侧的初始文件描述符(stdin,stdout和sdterr).
请注意,这只是一个证明概念的程序,所以我没有做任何形式的错误检查. #define _XOPEN_SOURCE 600 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <libgen.h> #include <string.h> #include <fcntl.h> int main() { pid_t i; char buf[10]; int fds,fdm,status; fdm = posix_openpt(O_RDWR); grantpt(fdm); unlockpt(fdm); close(0); close(1); close(2); i = fork(); if ( i != 0 ) { // father dup(fdm); dup(fdm); dup(fdm); printf("Where do I pop up?n"); sleep(2); printf("Where do I pop up - 2?n"); waitpid(i,&status,0); } else { // child fds = open(ptsname(fdm),O_RDWR); dup(fds); dup(fds); dup(fds); strcpy(buf,ptsname(fdm)); sprintf(buf,"xterm -S%c/2",basename(buf)); system(buf); exit(0); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |