2015-05-15 53 views
0

我想從一個進程發送數組字符到另一個使用管道,字符傳遞,但不是所有的人!只有開始的部分。 這是我的代碼:管不能讀/寫所有的字符

int p1[2], p2[2]; 

int main() 
{ 
    pipe(p1); 

    int f1= fork(); 

    if(f1 == 0) 

    {  
     char ar[100]; 
     int n = 38; 
     for(int i=0;i<n;i++) 
     { ar[i] = 'f'; } 
     close(p1[0]); //close the read 
     write(p1[1],ar,n+1); 

    } else if (f1 > 0) 

    { 
     wait(NULL); 
     int f2 = fork(); 
     if(f2 == 0) 

     { 
      char arr2[100]; 
      close(p1[1]); //close the write 
      int m = read(p1[0],arr2,strlen(arr2)); 
      cout << arr2 << " " << m << endl; 

     } 
     else if (f2 > 0) 

     {wait(NULL);} 

    } 
    return 0; 
} 
+0

您不會終止您發送/接收的「字符串」。另外,如果'read'失敗('m == -1'),那麼緩衝區的內容是未指定的。 –

回答

1

您未初始化的char陣列,這是你的錯誤就調用std::strlen()std::strlen()查找數組中空字節的第一次出現並返回其位置。但是該陣列是未初始化的,因此首次出現空字節undefined

此外,您應該檢查庫函數(pipe(),read(),write(),fork()等)的返回值。

+0

所以我怎麼能通過strlen()?我不能把常量,因爲在實際的程序中,我正在閱讀文件 –

+0

中的字符你可以先通過管道發送它並存儲它。 – Downvoter

相關問題