Dieses Programm sollte den Wert von 2^1 + 2^2 + ... + 2^10 berechnen:Berechnung Summe von N Befugnisse
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <math.h>
#define N 10
// sommatoria per i che va da 1 a N di 2^i, ogni processo calcola un singolo valore
int main(int argc, char** argv)
{
pid_t figli[N];
unsigned int i;
int status;
int fd[N][2];
int msg1=0,msg2;
int risultato=0;
bool padre=true;
for(i=0;i<N && padre;i++)
{
pipe(fd[i]);
figli[i]=fork();
if(figli[i]<0)
{
fprintf(stderr,"Una fork ha fallito\n");
}
else if(figli[i]==0)
{
padre=false;
}
else
{
msg1=i+1;
write(fd[i][1],&msg1,sizeof(int));
}
}
if(!padre)
{
read(fd[i][0],&msg2,sizeof(int));
msg2=pow(2.0,msg2);
write(fd[i][1],&msg2,sizeof(int));
exit(0);
}
else
{
for(i=0;i<N;i++)
{
read(fd[i][0],&msg2,sizeof(int));
risultato+=msg2;
}
}
if(padre)
fprintf(stderr,"%d\n",risultato);
return 0;
}
Aber wenn also Xecute das Programm, der Vater Prozess druckt 55 Warum?
Sie versuchen, ein einfaches Problem auf die komplizierteste Weise zu lösen, und sich wundern, warum es nicht funktioniert. Warum versuchst du es nicht einfach? – ugoren
Es riecht als Hausaufgabe –
Deshalb brauchen Sie Mathematik beim Programmieren. – Matt