diff -r a6822e6dd2ca -r 617fef4676b9 c++/POSIXoveFronty/Fronta/fronta.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c++/POSIXoveFronty/Fronta/fronta.cpp Tue Apr 07 01:16:04 2009 +0200 @@ -0,0 +1,66 @@ +#include +#include + +using namespace std; + +Fronta::Fronta() { + prijimaci = false; + odesilaci = false; + otevrena = false; +} + +Fronta::Fronta(char* nazev, bool prijimaci, bool odesilaci) { + this->nazev = nazev; + this->prijimaci = prijimaci; + this->odesilaci = odesilaci; + + /** Nastavíme vlastnosti fronty */ + mq_vlastnosti.mq_maxmsg = POCET_ZPRAV_VE_FRONTE; + mq_vlastnosti.mq_msgsize = DELKA_ZPRAVY; + + /** Vytvoříme odesílací (obojetnou) nebo (pouze) čtecí frontu */ + if (odesilaci) { + fronta = mq_open(nazev, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti); + otevrena = true; + } else if (prijimaci) { + fronta = mq_open(nazev, O_RDONLY); + otevrena = true; + } else { + otevrena = false; + } +} + +int Fronta::odesliZpravu(char* zprava) { + if (otevrena && odesilaci) { + return mq_send(fronta, zprava, strlen(zprava) + 1, 0); + } else { + return -1; + } +} + +char* Fronta::prijmiZpravu() { + if (otevrena && prijimaci) { + char zprava[DELKA_ZPRAVY + 1]; + zprava[DELKA_ZPRAVY] = '\0'; + if (mq_receive(fronta, zprava, DELKA_ZPRAVY, NULL) > 0) { + return zprava; + } else { + return NULL; + } + } else { + return NULL; + } +} + +void Fronta::zavriFrontu(bool zrusit) { + if (otevrena) { + if (zrusit) { + mq_unlink(nazev); + } + mq_close(fronta); + otevrena = false; + } +} + + +