Kolejka Komunikatow Problem

0

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

0

Zakładam że przedmiot nazywa się systemy operacyjne (albo bardzo podobnie). Tutaj masz bardzo ładnie opisany temat:
http://wazniak.mimuw.edu.pl/index.php?title=SOP_lab_nr_10

0

Własnie ten i inne kursy też przeczytałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1