vendredi 27 février 2015

C, Some statements in fork() not executing

I think I understand how fork() works, yet only some of my statements in the body execute. For example, in each conversion block, all the printf() will execute yet png_count, gif_count, and bmp_count never increment and remain 0 (as an be seen in the printf() output for child(x);



/* Create Processes */
printf("\n+++++++++++CREATING PROCESSES+++++++++++\n");
int i, pid;
png_count = 0;
gif_count = 0;
bmp_count = 0;

for(i = 0; i < convert_count; i++) {
pid = fork();
if(pid < 0) {
printf("Error: fork failed");
exit(1);
}
else if (pid == 0) {
/* Child execution */

/* PNG conversion */
if ((getpid() % 2) == 0) {
image_in_path = getInPath(input_dir, png_images[png_count]);
image_out_path = getOutPath(output_dir, png_images[png_count]);
printf("image_in_path: %s\n", image_in_path);
printf("Child (%d): %d\n", png_count+1, getpid());
png_count++;
printf("Converting: %s\n", image_in_path);
execlp("convert", "convert", image_in_path, "-resize", "200x200", image_out_path, NULL);
exit(1);
}
/* GIF conversion */
else if ((getpid() % 3) == 0) {
image_in_path = getInPath(input_dir, gif_images[gif_count]);
image_out_path = getOutPath(output_dir, gif_images[gif_count]);
printf("image_in_path: %s\n", image_in_path);
printf("Child (%d): %d\n", gif_count+1, getpid());
gif_count++;
printf("Converting: %s\n", image_in_path);
execlp("convert", "convert", image_in_path, "-resize", "200x200", image_out_path, NULL);
exit(1);
}
/* BMP conversion */
else {
image_in_path = getInPath(input_dir, bmp_images[bmp_count]);
image_out_path = getOutPath(output_dir, bmp_images[bmp_count]);
printf("image_in_path: %s\n", image_in_path);
printf("Child (%d): %d\n", bmp_count+1, getpid());
bmp_count++;
printf("Converting: %s\n", image_in_path);
execlp("convert", "convert", image_in_path, "-resize", "200x200", image_out_path, NULL);
exit(1);
}
}
else {
/* Parent Execution */
wait(NULL);
}
}


output:



+++++++++++CREATING PROCESSES+++++++++++
image_in_path: idir/panda.bmp
Child (1): 5389
Converting: idir/panda.bmp
image_in_path: idir/panda.bmp
Child (1): 5393
Converting: idir/panda.bmp
image_in_path: idir/penguin.gif
Child (1): 5397
Converting: idir/penguin.gif
image_in_path: idir/bmp.png
Child (1): 5402
Converting: idir/bmp.png
image_in_path: idir/bmp.png
Child (1): 5408
Converting: idir/bmp.png
image_in_path: idir/panda.bmp
Child (1): 5413
Converting: idir/panda.bmp
image_in_path: idir/panda.bmp
Child (1): 5417
Converting: idir/panda.bmp
image_in_path: idir/penguin.gif
Child (1): 5421
Converting: idir/penguin.gif
image_in_path: idir/panda.bmp
Child (1): 5425
Converting: idir/panda.bmp
image_in_path: idir/panda.bmp
Child (1): 5429
Converting: idir/panda.bmp


Thanks in advance for the help! I've spent way too many hours trying to figure this out with no luck.


Aucun commentaire:

Enregistrer un commentaire