在C中为子进程分配作业的麻烦

时间:2016-11-20 23:10:52

标签: c fork

我正在开发一个减少PGM图像的C程序。我的算法应该将作业分成我的子进程处理的四个唯一任务,但它们每个都执行与之前的子进程相同的任务。

更具体地说,我的程序应该在缩小图像的四列中写入以形成完整的图像,但我得到的只是第一列而只是第一列。我已经确认每个孩子都是通过跳过第一个孩子来复制孩子的工作。当我这样做时,结果中只显示第二列。

以下是我的源代码部分:

 int cc = cols/selection;  
 int rr = rows/selection;
 unsigned char image2[rr][cc];  //creates the space for output image


 char temp[rr][cc];

 /*
 /* Main part of program
 /* reduces image by selecting every nth pixel and adding it to
 /* image2.
 */

 tp = 5;  /* type==5 */



for (int x = 0; x < numChildren; x++){
 if((childpids[x] = fork()) == -1)
        {
                perror("fork");
                exit(1);
        }

        if(childpids[x] == 0)
        {
                /* Child process closes input*/
                close(fd[0]);
                /* Send 2D int array through output*/

                     for (i=0; i< rr; i++)
                       for(j = (cc / numChildren) * x; j < (cc / numChildren) * (x+1); j++)
                       {
                           temp[i][j]=imagePtr[((i*selection)*cols + (j*selection))];
                       }

                write(fd[1], &temp, sizeof(temp));
                exit(x);
        }
        else
        {
                /* Parent process closes output*/
                close(fd[1]);

                /* Read in a 2D int array from input*/
                nbytes = read(fd[0], temp, sizeof(temp));
                 for (i=0; i< rr; i++)
                       for(j = 0; j < cc; j++)
                       {
                           image2[i][j]=temp[i][j];
                       }
        }
}

 imagePtr2=(image_ptr) image2;

 printf("\n Now writing to image file ... \n");

 //creates output image
 write_pnm(imagePtr2, argv[2], rr, cc, tp);

请注意,所使用的某些功能是为了编写此程序而提供给我的库的一部分。

0 个答案:

没有答案