1.1 --- a/c++/POSIXoveFronty/Fronta/program.cpp Sun Apr 05 21:08:09 2009 +0200
1.2 +++ b/c++/POSIXoveFronty/Fronta/program.cpp Sun Apr 05 22:02:15 2009 +0200
1.3 @@ -1,14 +1,11 @@
1.4 -/*
1.5 - * File: program.cpp
1.6 - * Author: fiki
1.7 - *
1.8 - * Created on 1. duben 2009, 23:54
1.9 +/**
1.10 + * Program POSIXové Fronty
1.11 + * @autor František Kučera <franta-hg@frantovo.cz>
1.12 */
1.13
1.14 #include <program.h>
1.15 #include <stdlib.h>
1.16 -//#include <iostream>
1.17 -#include <c++/4.3.2/iostream>
1.18 +#include <iostream>
1.19 #include <mqueue.h>
1.20 #include <readline/readline.h>
1.21 #include <signal.h>
1.22 @@ -22,35 +19,26 @@
1.23
1.24 cout << "Vítejte v programu POSIXovéFronty" << endl;
1.25
1.26 + /** Nastavíme reakci na signál SIGTERM */
1.27 signal(SIGTERM, zpracujSignal);
1.28 + signal(SIGINT, zpracujSignal);
1.29
1.30 + /** Nastavíme vlastnosti fronty */
1.31 mq_vlastnosti.mq_maxmsg = POCET_ZPRAV_VE_FRONTE;
1.32 mq_vlastnosti.mq_msgsize = DELKA_ZPRAVY;
1.33
1.34 -
1.35 - //cout << "maxmsg: " << ma.mq_maxmsg;
1.36 - //cout << "msgsize: " << ma.mq_msgsize;
1.37 -
1.38 -
1.39 -
1.40 -
1.41 - //cout << NAZEV_FRONTY << endl;
1.42 -
1.43 + /** Program pracuje buď v režimu přijímání nebo odesílání */
1.44 if (isOdesilaciRezim()) {
1.45 odesilej();
1.46 } else {
1.47 prijimej();
1.48 }
1.49
1.50 -
1.51 -
1.52 -
1.53 -
1.54 + /** Sem se nedostaneme – program končí, až když dostane patřičný signál. */
1.55 return (EXIT_SUCCESS);
1.56 }
1.57
1.58 bool isOdesilaciRezim() {
1.59 - //char *odpoved = readline("Zvolte režim: (p)řijímací / (o)desílací");
1.60
1.61 cout << "Zvolte režim: (p)řijímací / (o)desílací" << endl;
1.62
1.63 @@ -67,9 +55,7 @@
1.64 }
1.65
1.66 void odesilej() {
1.67 - cout << "odesíláme" << endl;
1.68 -
1.69 -
1.70 + cout << "Odesíláme…" << endl;
1.71
1.72 mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti);
1.73
1.74 @@ -77,18 +63,16 @@
1.75
1.76 int vysledek = mq_send(fronta, zprava, strlen(zprava) + 1, 0);
1.77 if (vysledek == 0) {
1.78 - cout << "Zpráva odeslána" << endl;
1.79 + cout << "Zpráva odeslána." << endl;
1.80 } else {
1.81 - cout << "Při odesílání zprávy došlo k chybě" << endl;
1.82 + cout << "Při odesílání zprávy došlo k chybě." << endl;
1.83 }
1.84
1.85 - //cin.get();
1.86 -
1.87 mq_close(fronta);
1.88 }
1.89
1.90 void prijimej() {
1.91 - cout << "přijímáme" << endl;
1.92 + cout << "Přijímáme…" << endl;
1.93
1.94 mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDONLY);
1.95 char s[DELKA_ZPRAVY + 1];
1.96 @@ -96,16 +80,15 @@
1.97 if (mq_receive(fronta, s, DELKA_ZPRAVY, NULL) > 0) {
1.98 printf("Přijatá zpráva: %s\n", s);
1.99 } else {
1.100 - cout << "Nepodařilo se přijmout zprávu" << endl;
1.101 + cout << "Nepodařilo se přijmout zprávu." << endl;
1.102 }
1.103
1.104 - //mq_unlink(NAZEV_FRONTY);
1.105 mq_close(fronta);
1.106 }
1.107
1.108 void zpracujSignal(int signal) {
1.109 - if (signal == SIGTERM) {
1.110 - cout << "Končím program na základě signálu " << signal << endl;
1.111 + if (signal == SIGTERM || signal == SIGINT) {
1.112 + cout << "Končím program na základě signálu " << signal << "." << endl;
1.113 exit(1);
1.114 }
1.115 }
2.1 --- a/c++/POSIXoveFronty/Fronta/program.h Sun Apr 05 21:08:09 2009 +0200
2.2 +++ b/c++/POSIXoveFronty/Fronta/program.h Sun Apr 05 22:02:15 2009 +0200
2.3 @@ -1,8 +1,6 @@
2.4 -/*
2.5 - * File: program.h
2.6 - * Author: fiki
2.7 - *
2.8 - * Created on 2. duben 2009, 0:07
2.9 +/**
2.10 + * Program POSIXové Fronty
2.11 + * @autor František Kučera <franta-hg@frantovo.cz>
2.12 */
2.13
2.14 #include <mqueue.h>
2.15 @@ -15,21 +13,32 @@
2.16 extern "C" {
2.17 #endif
2.18
2.19 + /** Název POSIXové fronty */
2.20 const char* NAZEV_FRONTY = "/mojeFronta";
2.21 +
2.22 + /** Vlastnosti fronty */
2.23 struct mq_attr mq_vlastnosti;
2.24 +
2.25 + /** Maximální počet zpráv ve frontě (potom začne blokovat) */
2.26 const int POCET_ZPRAV_VE_FRONTE = 5;
2.27 +
2.28 + /** Délka jedné zprávy ve frontě */
2.29 const int DELKA_ZPRAVY = 100;
2.30
2.31 + /** Režim přijímání zpráv */
2.32 void prijimej();
2.33 +
2.34 + /** Režim odesílání zpráv */
2.35 void odesilej();
2.36
2.37 /**
2.38 * Zeptá se uživatele, zda se má program spustit v odesílacím nebo přijímacím režimu.
2.39 - * true = odesílací
2.40 + * true = odesílací,
2.41 * false = přijímací
2.42 */
2.43 bool isOdesilaciRezim();
2.44
2.45 + /** Zpracuje signál jako např. SIGTERM (ten ukončí běh tohoto programu). */
2.46 void zpracujSignal(int signal);
2.47
2.48 #ifdef __cplusplus