# HG changeset patch # User František Kučera # Date 1238961735 -7200 # Node ID a6822e6dd2ca619daa2e3ad528e58300f64dfb5f # Parent fb862232e704835ad887741ea10f95f13cab28e3 Komentáře, drobnosti diff -r fb862232e704 -r a6822e6dd2ca c++/POSIXoveFronty/Fronta/program.cpp --- a/c++/POSIXoveFronty/Fronta/program.cpp Sun Apr 05 21:08:09 2009 +0200 +++ b/c++/POSIXoveFronty/Fronta/program.cpp Sun Apr 05 22:02:15 2009 +0200 @@ -1,14 +1,11 @@ -/* - * File: program.cpp - * Author: fiki - * - * Created on 1. duben 2009, 23:54 +/** + * Program POSIXové Fronty + * @autor František Kučera */ #include #include -//#include -#include +#include #include #include #include @@ -22,35 +19,26 @@ cout << "Vítejte v programu POSIXovéFronty" << endl; + /** Nastavíme reakci na signál SIGTERM */ signal(SIGTERM, zpracujSignal); + signal(SIGINT, zpracujSignal); + /** Nastavíme vlastnosti fronty */ mq_vlastnosti.mq_maxmsg = POCET_ZPRAV_VE_FRONTE; mq_vlastnosti.mq_msgsize = DELKA_ZPRAVY; - - //cout << "maxmsg: " << ma.mq_maxmsg; - //cout << "msgsize: " << ma.mq_msgsize; - - - - - //cout << NAZEV_FRONTY << endl; - + /** Program pracuje buď v režimu přijímání nebo odesílání */ if (isOdesilaciRezim()) { odesilej(); } else { prijimej(); } - - - - + /** Sem se nedostaneme – program končí, až když dostane patřičný signál. */ return (EXIT_SUCCESS); } bool isOdesilaciRezim() { - //char *odpoved = readline("Zvolte režim: (p)řijímací / (o)desílací"); cout << "Zvolte režim: (p)řijímací / (o)desílací" << endl; @@ -67,9 +55,7 @@ } void odesilej() { - cout << "odesíláme" << endl; - - + cout << "Odesíláme…" << endl; mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti); @@ -77,18 +63,16 @@ int vysledek = mq_send(fronta, zprava, strlen(zprava) + 1, 0); if (vysledek == 0) { - cout << "Zpráva odeslána" << endl; + cout << "Zpráva odeslána." << endl; } else { - cout << "Při odesílání zprávy došlo k chybě" << endl; + cout << "Při odesílání zprávy došlo k chybě." << endl; } - //cin.get(); - mq_close(fronta); } void prijimej() { - cout << "přijímáme" << endl; + cout << "Přijímáme…" << endl; mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDONLY); char s[DELKA_ZPRAVY + 1]; @@ -96,16 +80,15 @@ if (mq_receive(fronta, s, DELKA_ZPRAVY, NULL) > 0) { printf("Přijatá zpráva: %s\n", s); } else { - cout << "Nepodařilo se přijmout zprávu" << endl; + cout << "Nepodařilo se přijmout zprávu." << endl; } - //mq_unlink(NAZEV_FRONTY); mq_close(fronta); } void zpracujSignal(int signal) { - if (signal == SIGTERM) { - cout << "Končím program na základě signálu " << signal << endl; + if (signal == SIGTERM || signal == SIGINT) { + cout << "Končím program na základě signálu " << signal << "." << endl; exit(1); } } diff -r fb862232e704 -r a6822e6dd2ca c++/POSIXoveFronty/Fronta/program.h --- a/c++/POSIXoveFronty/Fronta/program.h Sun Apr 05 21:08:09 2009 +0200 +++ b/c++/POSIXoveFronty/Fronta/program.h Sun Apr 05 22:02:15 2009 +0200 @@ -1,8 +1,6 @@ -/* - * File: program.h - * Author: fiki - * - * Created on 2. duben 2009, 0:07 +/** + * Program POSIXové Fronty + * @autor František Kučera */ #include @@ -15,21 +13,32 @@ extern "C" { #endif + /** Název POSIXové fronty */ const char* NAZEV_FRONTY = "/mojeFronta"; + + /** Vlastnosti fronty */ struct mq_attr mq_vlastnosti; + + /** Maximální počet zpráv ve frontě (potom začne blokovat) */ const int POCET_ZPRAV_VE_FRONTE = 5; + + /** Délka jedné zprávy ve frontě */ const int DELKA_ZPRAVY = 100; + /** Režim přijímání zpráv */ void prijimej(); + + /** Režim odesílání zpráv */ void odesilej(); /** * Zeptá se uživatele, zda se má program spustit v odesílacím nebo přijímacím režimu. - * true = odesílací + * true = odesílací, * false = přijímací */ bool isOdesilaciRezim(); + /** Zpracuje signál jako např. SIGTERM (ten ukončí běh tohoto programu). */ void zpracujSignal(int signal); #ifdef __cplusplus