-2
我編寫了一個C++代碼來實現父級和子級處理器之間的雙向管道。 一切正常工作我只需要增加緩衝區的大小(管道的輸出)。我知道,有很多是用malloc解決字符的大小職位,但我認爲我的問題是有點特殊,因爲它需要以下條件:在C++中增加管道輸出的大小
- 確定緩衝區(字符數組)的大小從返回管道。
- 將緩衝區的大小增加到大於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);**
爲什麼你真的需要增加你的緩衝區大小動態?您可以在循環中始終使用'read()'來獲取更多可用的數據。如果您確定需要動態增加緩衝區,請使用'std :: vector'並使用'resize()'函數。 –
@πάντα我不幸的是不能在循環中使用讀取函數(這很難解釋爲什麼,但基本上python文件是以需要讀取函數完成一次的方式編寫的)我會給vector char一槍,看看它是怎麼回事。謝謝! – Maya
使用['std :: vector :: data()'](http://en.cppreference.com/w/cpp/container/vector/data)函數將先前大小的向量傳遞給read() 。 –