Nowe posty

Autor Wątek: Kolejki komunikatów  (Przeczytany 5608 razy)

dzadzonek

  • Gość
Kolejki komunikatów
« dnia: 2012-01-14, 00:34:27 »
Witam serdecznie.

Mam problem z ponizszym zadaniem:

Napisz program klienta i serwera realizujące następujący scenariusz :
Serwer sumuje liczby wysyłane przez klienta . Liczby są przesyłane jako komunikat typu M_DANE , a ostatnia z liczb jest wysyłana jako komunikat M_END . Po otrzymaniu tego komunikatu serwer odsyła wynik sumowania komunikatu typu M_WYNIK.

Mój program działa tylko dla dwóch liczb, bo to wiem jak zrobic, ale przy kilku juz mam problem. Mógłby mi ktoś powiedzieć jak to zrobić, dać wskazówki albo kawałek kodu;)

serwer:
#include 
#include
#include
#include
#include
#include
#include
int qid;
void koniec(int signum)
{
        msgctl(qid,IPC_RMID,0);
        exit(0);
}
struct komunikat_out
{
long msgtype;
float wynik;
};
struct komunikat_in
{
long msgtype;
float a, b;
int dzialanie;
};
int main()
{
struct komunikat_in in;
struct komunikat_out out;
key_t d=ftok(getenv("HOME"),3);
qid=msgget(d,0744);
signal(2,koniec);
while(msgrcv(qid,(struct msgbuf*)&in,(sizeof(in)-sizeof(long)),0,0))
{
out.wynik=in.a+in.b;


out.msgtype=in.msgtype;
msgsnd(qid,(struct mbuf*)&out,(sizeof(out)-sizeof(long)),0);
}
exit(0);
}

chmooreck

  • Gość
Kolejki komunikatów
« Odpowiedź #1 dnia: 2012-01-14, 09:31:31 »
Jeśli to jest Twój program to nie widzę powodu, dla którego problemem by miało być sumoiwanie większej ilości liczb.

Przemyśl jaki pownien być algorytm rozwiązania Twojego problemu ? Wysyłanie/odbieranie komunikatów już masz. Jak bys liczył sumę liczb przychodzących w kilku komunikatach ?

dzadzonek

  • Gość
Kolejki komunikatów
« Odpowiedź #2 dnia: 2012-01-15, 14:59:29 »
Tak, to mój kod, pisalismy go na zajeciach, a powyzsze zadanie jest do domu.
chodzi o to, że nie wiem jak zapisac w kodzie "komunikat typu M_DANE" oraz "M_END".
gdyby liczba wczytywań była określona, to zrobiłbym zadanie na sztywno, ale nie jest. Załóżmy, że ostatnia zmienna, która byłaby wczytywana nazywałaby się np "koniec", to jak wtedy wiedziec, ile liczb jest przed nią. Użyc jakiejś zmiennej licznik?

chmooreck

  • Gość
Kolejki komunikatów
« Odpowiedź #3 dnia: 2012-01-15, 22:26:26 »
Na przykład:
enum typ {
M_DANE,
M_END};

struct kominakt {
typ _typ;
int liczba;
}
Cytat: dzadzonek
Załóżmy, że ostatnia zmienna, która byłaby wczytywana nazywałaby się np "koniec", to jak wtedy wiedziec, ile liczb jest przed nią. Użyc jakiejś zmiennej licznik?
A po ci wiedzieć ile liczb masz przed ostatnią. Na ostaniej kończysz. Nie ptorzebujesz żadnego licznika - wystarczy bieżąca suma.