在c ++中增加管道输出的大小

时间:2016-05-02 16:13:24

标签: c++ char pipe

我写了一个c ++代码来实现父处理器和子处理器之间的双向管道。 一切都很完美我只需要增加缓冲区的大小(管道的输出)。我知道有很多帖子使用malloc来处理char的大小,但我认为我的问题有点具体,因为它需要以下内容:

  1. 确定从管道返回的缓冲区(char数组)的大小。
  2. 将缓冲区的大小增加到大于1 MB。
  3. 以下是我的代码片段:

    #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);**
    

1 个答案:

答案 0 :(得分:0)

假设你在Linux下,你可以使用:

fcntl(pipe_fd, F_SETPIPE_SZ, size);

http://man7.org/linux/man-pages/man2/fcntl.2.html