2013-06-29 5 views
1

Я пытаюсь учиться на экзамен, и я просто не могу понять простую программу вилки.Как работает вилка и труба в системе Unix-процесса?

У меня есть этот кусок кода и вы должны добавить ему код. Чтобы родительский процесс отправил через PIPE значение n ребенку. Ребенок должен удвоить значение, а не печатать что-либо и вернуть его родительскому.

Затем родитель должен распечатать его на экране.

int main() { 
int n=1; 
if(fork() == 0) { 
} 
printf(“%d\n”, n); 
return 1; 
} 

Я действительно не знаю, как работают PIPE и как их использовать. Может кто-нибудь мне помочь?

ответ

1
pid_t cp; 
int fi[2],st; 
int n; 
if(pipe(fi)==-1) {perror("pipe error");exit(0);} 
if((cp=fork())==-1) {perror("fork"); exit(0);} 
else if(cp==0) 
{ 
     sleep(2); 
     close(fi[1]); 
     read(fi[0],&n,2); 
     n*=2; 
     close(fi[0]); 
     exit(n); 
    } 
    else 
    { 
     close(fi[0]); 
     write(fi[1],n,2); 
     close(fi[1]); 
     waitpid(cp,&st,0); 
      printf("%d",st); 
      exit(0); 
    }}  




Рабочие трубы очень прост. PIPE содержит два конца, 1 для чтения и другое для записи. Вы должны закрыть соответствующий конец во время чтения или записи. После этого вы используете его как обычный файл с функциями read() и write().

Простите меня за мое форматирование, я печатаю по мобильному телефону.

+0

Спасибо. Это то, что мне нужно. –