2013-11-15 5 views
0

Я пишу программу, которая суммирует терминал, я написал еще одну фиктивную програму, которая принимает только входные данные и распечатывает их. фиктивная прога:контекстный переключатель между двумя процессами в linux

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

В моей основной программе я запускаю фиктивную программу с помощью fork-> exec. мой вопрос в том, какой из них получает вход от пользователя? есть ли переключатель контекста между ними, поэтому один процесс принимает вход за раз, или процесс отца принимает все входные данные, если я не позвоню.

EDIT: вход не будет использоваться совместно.

, тогда я хочу вызвать дочерний процесс на передний план, я пытаюсь использовать 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 по какой-то причине и как PGID до setpgrp и после того, как одно и то же.

+1

Вы должны * прочитать руководство * для 'fork' и' exec' и выяснить, что происходит с открытыми файловыми дескрипторами, такими как стандартный ввод. –

+0

привет, моя проблема заключается не в fork exec, а в предотвращении и разрешении ввода для нового процесса. –

+1

Ваш вопрос в конечном счете о том, что происходит со стандартным вводом. Это задокументировано как часть поведения как 'fork', так и' exec'. –

ответ

1

Основная программа подключена к терминалу и получает вход. Если вы используете потоки вместо создания вилки, то входы/выходы будут совместно использоваться между потоками.

Если считывается только один поток, он получает все входные данные. Если два или более потока читаются, они не делят данные, и результат является непредсказуемым.

Смежные вопросы