2013-06-29 44 views
1

我正在努力學習考試,我只是無法弄清楚一個簡單的叉子程序。fork和pipe如何在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包含兩個末端,一個用於讀取,另一個用於寫入。閱讀或寫作時必須關閉適當的結尾。之後,將其用作具有read()和write()函數的常規文件。

原諒我的格式,我在手機上打字。

+0

謝謝。這是我需要的。 –