The
general approach recommended here is to use the clock variable to define
sequential animation scenes, and then spawn a number of
UNIX processes using the command fork(), each of which calls
a command line with a slightly different POV-ray scripts that are passed
to the system()
command. From within a loop, the function sprintf() can be used to
create the different commands that POV-Ray will use, passing
the +K and +O options the loop
variable for the appropriate animation frames. In the example below,
the character array str[ ] will contain the povray command
with whatever loop variable is being executed.
sprintf (str, "povray +K%d +Ooutfile%d.ppm", loop, loop);
If the value of loop = 3, The following code is from the Cluster How To example developed by the sysadmins from 1999-2000.
/* forktest.c */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
int main(void)
{
char name[10];
FILE *outfile;
unsigned int pnum, i, pid;
double b=1, c=1;
nice(5); // The command "nice" will run the program at a lower priority
for(pnum=0; pnum<16; pnum++) // Loop through 16 processes
{
/* Fork a duplicate child process that starts running at this location
but with the inherited values of the variables. */
switch (pid=fork())
{
case -1: /* could not fork */
printf("uh oh.\n");
exit(1);
break;
case 0: /* child process */
sprintf(name,"file%d",pnum); // Use sprintf to create file name
outfile = fopen(name,"w"); // Open file for output
fprintf(outfile,"I am process %d\nMy PID is #%d",pnum,getpid());
fclose(outfile);
for(i=pnum << 16; pnum+1 << 16; i++)
{ // Make garbage computations. Use bit shift to make huge numbers
b = sin(b*i)+cos(c*i);
c = sin(c*i)+cos(b*i);
}
exit(0);
default: /* parent process */
break;
}
}
return 0;
}