2016-05-02 31 views
-2

我編寫了一個C++代碼來實現父級和子級處理器之間的雙向管道。 一切正常工作我只需要增加緩衝區的大小(管道的輸出)。我知道,有很多是用malloc解決字符的大小職位,但我認爲我的問題是有點特殊,因爲它需要以下條件:在C++中增加管道輸出的大小

  1. 確定緩衝區(字符數組)的大小從返回管道。
  2. 將緩衝區的大小增加到大於1 MB的值。

這裏是我的代碼片段:

#define PARENT_READ readpipe[0] 
#define CHILD_WRITE readpipe[1] 
#define CHILD_READ writepipe[0] 
#define PARENT_WRITE writepipe[1] 

int writepipe[2] = {-1,-1};// parent -> child                                       
int readpipe[2] = {-1,-1};//child -> parent                                        
pid_t childpid;                                            
string pipeInput; 
const char * c; 
**char buffer [1000000]; //1 MB for now ..** 

if((childpid=fork())<0) 
    { 
     //cannot fork child                                             
     printf("cannot fork child"); 
     exit(-1); 
    } 
    else if (childpid==0) 
    { 
     //child process                                              
     close(PARENT_WRITE); 
     close(PARENT_READ); 
     dup2(CHILD_READ,0); //read data from pipe instead of stdin                                   
     dup2(CHILD_WRITE , 1);//write data to pipe instead of stdout                                  
     system("python import_modify_graph.py"); 
     close(CHILD_READ); 
     close(CHILD_WRITE); 
    } 
    else 
    { 
    close(CHILD_READ); 
    close(CHILD_WRITE); 
    pipeInput="SOME INPUT"; 
    c=pipeInput.c_str(); 
    write(PARENT_WRITE,c,strlen(c)); 
    close(PARENT_WRITE); 
    **read(PARENT_READ,buffer,1000000);** 
+0

爲什麼你真的需要增加你的緩衝區大小動態?您可以在循環中始終使用'read()'來獲取更多可用的數據。如果您確定需要動態增加緩衝區,請使用'std :: vector '並使用'resize()'函數。 –

+0

@πάντα我不幸的是不能在循環中使用讀取函數(這很難解釋爲什麼,但基本上python文件是以需要讀取函數完成一次的方式編寫的)我會給vector char一槍,看看它是怎麼回事。謝謝! – Maya

+0

使用['std :: vector :: data()'](http://en.cppreference.com/w/cpp/container/vector/data)函數將先前大小的向量傳遞給read() 。 –

回答