我正在开发一个减少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);
请注意,所使用的某些功能是为了编写此程序而提供给我的库的一部分。