Witam,
mam problem ponieważ wyswietla mi sie blad po stronie klienta i serwera :
"blad zapisu komunikatu w kolejce komunikatow: Invalid argument "
Ma ktos jakis pomysl??
klient.cc
#include <iostream>
#include <stdio.h>
#include "kolej.h"
using namespace std;
int main()
{
class Operacja op;
class Komunikat kom1;
int kolejkaDoPisania;
int kolejkaDoCzytania;
int wielkoscBufforaDoZapisuWKolejce;
//int liczba = 0;
kom1.typ = 1;
op.idUzytkownika = getpid();
bcopy(&op, kom1.trescKomunikatu ,sizeof(op));
if (((kolejkaDoPisania = msgget(kluczKolejki, IPC_EXCL|prawa)) != -1))
{
perror("Server Nie jest czynny");
exit(-1);
}
cout << "Podaj liczbe ";
cin >> op.game;
//if (((kolejkaDoPisania = msgget(kluczKolejki, IPC_CREAT|prawa)) == -1)) perror("nie moge utworzyc kolejki komunikatow");
wielkoscBufforaDoZapisuWKolejce = sizeof(kom1) - sizeof(long);
cout << "Jestem pid nr " << getpid() << "i wlasnie wysylam komunikat " << endl;
if (msgsnd(kolejkaDoPisania,&kom1 ,wielkoscBufforaDoZapisuWKolejce ,0) == -1) perror("blad zapisu komunikatu w kolejce komunikatow");
return 0;
}
serwer.cc
#include "kolej.h"
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
using namespace std;
int main()
{
Operacja op;
Komunikat komunikatOdebrany;
int kolejkaDoCzytania;
int wielkoscKomunikatu;
signal(SIGCLD,SIG_IGN);
if (((msgget(kluczKolejki, IPC_EXCL|prawa)) != -1))
{
if( (msgctl(kluczKolejki, IPC_RMID, NULL)) == -1 )perror("nie moge usunac kolejki");
}
if ( (kolejkaDoCzytania = msgget(kluczKolejki, prawa|IPC_CREAT|IPC_EXCL)) == 0) perror("Server : nie moge utworzyc kolejki komunikatow");
wielkoscKomunikatu = sizeof(komunikatOdebrany) - sizeof(long);
if ((msgrcv(kolejkaDoCzytania ,&komunikatOdebrany, wielkoscKomunikatu, 1, 0)) == -1) perror("Server : nie moge odczytac z kolejki komunikatow");
bcopy(komunikatOdebrany.trescKomunikatu, &op, sizeof(op));
cout << "Wiatj pid nr " << op.idUzytkownika << endl;
//op.operacjaArmetyczna();
return 0;
}
kolej.h
#ifndef KOLKOM_H
#define KOLKOM_H
#define kluczKolejki (key_t)2314
#define prawa 0666
#define wielkoscTablicy 1000
#include <cmath>
#include <time.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/errno.h>
#include <signal.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <iostream>
class Operacja
{
public :
long idUzytkownika;
int game;
//koniec klasy operacja
};
class Komunikat
{
public :
long typ;
char trescKomunikatu[wielkoscTablicy];
};
#endif
Dziękuje bardzo bardzo z góry za pomoc.
dodanie znaczników <code class="cpp"> - fp