0

我正在编写一个汇总终端的程序,我编写了另一个只接受输入并将其打印出来的虚拟程序。虚拟编:

int main(int argc, char *argv[]) {
char text[128] = {0};
while(1){
    fgets (text, 128, stdin);
    printf("%s\n", text);
}
return 0;
}

在我的主程序中,我使用 fork->exec 运行虚拟程序。我的问题是其中哪一个从用户那里得到输入?它们之间是否存在上下文切换,因此一个进程一次获取输入,否则父进程将获取所有输入,除非我调用等待。

编辑:输入不会被共享。

然后我想将子进程调用到前台我尝试使用 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 都是相同的。

4

1 回答 1

1

主程序连接到终端并获取输入。如果您使用线程而不是创建分叉,则 I/O 将在线程之间共享。

如果只有一个线程读取,它会获取所有输入。如果两个或更多线程读取,它们不共享数据,结果有点不可预测。

于 2013-11-15T09:13:19.057 回答