Komentáře, drobnosti
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sun, 05 Apr 2009 22:02:15 +0200
changeset 5a6822e6dd2ca
parent 4 fb862232e704
child 6 617fef4676b9
Komentáře, drobnosti
c++/POSIXoveFronty/Fronta/program.cpp
c++/POSIXoveFronty/Fronta/program.h
     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