Witam,
Mam problem, bo nie wiem jak wysłać objekt typu WyrazenieHornera przez potok i go odebrac.
#include <iostream>
#include <new>
#include <cmath>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>
#include <sys/stat.h>
#include <stdio.h>
using namespace std;
class WyrazenieHornera
{
private :
double wyn;
double *tab;
double x;
int wielkoscTablicy;
public :
WyrazenieHornera()
{
}
WyrazenieHornera(double *t, const double &xx, const int &wt)
{
wielkoscTablicy = wt;
tab = new double[wt];
for(int it = 0; it < wielkoscTablicy; ++it)
{
tab[0] = t[0];
}
x = xx;
wyn = t[0];
cout << "<---------------->tab[0]" << wyn << endl;
}
~WyrazenieHornera()
{
delete[] tab;
}
double getWynikDouble()
{
return wyn;
}
void liczWyrazenie()
{
wyn = (wyn * x) + tab[1];
}
};
int main()
{
double *tab; // tablica wspolczynikow wielomainu
int stopienWielomianu;
double wynik;
int wielkoscTablicy; //suma wspolczynikow wielomianu + wyraz wolny
double x;
//Zmienne dla potoków nie nazwanych
int deskplikmp[2]; //wysyla dane z macierzystego do potomnego
int deskplikpm[2];//wysyla dane z potomnego do macierzystego
double wynikTymczasowy;
if(pipe(deskplikmp) < 0) perror ("Pipe M->P nie utworzono \n");
if(pipe(deskplikpm) < 0) perror ("Pipe P->M nie utworzono \n");
cout << "Podaj wielkosc wielomianu " << endl;
cin >> stopienWielomianu;
cout << "Podaj x " << endl;
cin >> x;
wielkoscTablicy = stopienWielomianu + 1;
tab = new double[wielkoscTablicy];
for(int i = 0; i < wielkoscTablicy; ++i)
{
cout << " Podaj liczbe, ktroa stoi przy wielomianie stopnia " << (wielkoscTablicy - 1 - i) << endl;
cin >> tab[i];
}
WyrazenieHornera objHornera(tab, x, wielkoscTablicy);
WyrazenieHornera odebranieObjHornera;
//SWITCH początek
pid_t pid;
switch (pid = fork())
{
case -1: /*obsluga bledu*/
{
perror ("nie udalo sie utworzyc prcesu potomnego \n");
//exit(1);
break;
}
case 0: /*powstanie procesu potomnego*/
close(deskplikmp[1]); //zamyka do pisania
close(deskplikpm[0]); //zamyka do czytania
read(deskplikmp[0],&odebranieObjHornera ,sizeof(odebranieObjHornera));
cout << "odebranieobjHorner " << odebranieObjHornera.getWynikDouble() << endl;
break;
{
}
default: /*proces macierzysty*/
{
close(deskplikmp[0]); //zamyka do czytania
printf("\nWyslalrem obj do potomnego");
write(deskplikmp[1],&objHornera,sizeof(objHornera));
//----------------------------------------------------------------=======================
//if (wait(NULL) == -1) perror("wait error");
break;
}
}
//Koniec Switcha
return 0;
}