我正在编写一个总结终端的程序,我写了另一个虚拟程序,只接受输入并打印出来。虚拟编程:
int main(int argc, char *argv[]) {
char text[128] = {0};
while(1){
fgets (text, 128, stdin);
printf("%s\n", text);
}
return 0;
}
在我的主程序中,我使用fork-> exec运行虚拟程序。我的问题是哪一个得到了用户的输入?在它们之间有上下文切换,所以一个进程一次接受输入,或者父进程将接受所有输入,除非我调用wait。
编辑:不会共享输入。
然后我想将子进程调用到前台我尝试使用tcsetpgrp但没有成功。我做以下事情:
if((son = fork())==0){//son process
}else{//father
printf("the old group id is:%d\n", getpgid(son));
setpgid(son,son);
k = printf("the new group id is:%d\n",getpgid(son));
j = tcgetpgrp(0, getpgid(son))
}
由于某种原因,j设置为25,setpgrp之前和之后的pgid都是相同的。
答案 0 :(得分:1)
主程序连接到终端并获取输入。如果使用线程而不是创建fork,则I / O将在线程之间共享。
如果只有一个线程读取,它将获得所有输入。如果两个或多个线程读取,它们不共享数据,结果有点不可预测。