2014-01-28 24 views
1

我有以下測試程序,我喜歡將數據從最深的子節點發送(寫入)到父節點。寫入管道後很多fork不工作

代碼是:

#define M1 "Message One" 
int main(int argc, char **argv) { 
int f1[2]; 
char buff[32]; 

pipe(f1); 

if (fork() == 0) { 
    if (fork() == 0) { 
     if (fork() == 0) { 
      printf("%s :%d\n", "f1[0] :",f1[0]); 
      while(read(f1[0], buff, sizeof(buff)) > 0) 
       printf("%s\n", buff); 
        return 0; 
     } else { 
      //do nothing 
     } 
    } else { 
     //do nothing 
    } 

} else {  
    sleep(2); 
    printf("%s :%d\n", "f1[1] :",f1[1]); 
    if(write(f1[1], M1, sizeof(M1) < 0)) 
    printf("%s\n","Error"); 
    return 0; 
} 
return 0; 
} 

與我的代碼的問題是,程序不打印消息。

我不知道這是否與許多分叉有關。

回答

1

改變你的if聲明

if (write(f1[1], M1, sizeof(M1)) < 0) 

,而不是

if(write(f1[1], M1, sizeof(M1) < 0)) 
+0

感謝@sujin,它解決了,看評論的帖子。 – pmverma

2

關閉未使用的文件描述符它會正常工作

在最內側的孩子

close(f1[1]); 

在父進程

close(f1[0]); 

而且也行寫語法錯誤被稱爲改變它

write(f1[1], M1, sizeof(M1)) < 0) 
+0

非常感謝,我忘記關閉未使用的讀/寫結束。 – pmverma