2 * Program POSIXové Fronty
3 * @autor František Kučera <franta-hg@frantovo.cz>
10 #include <readline/readline.h>
16 * Spuštění programu „POSIXovéFronty“
20 cout << "Vítejte v programu POSIXovéFronty" << endl;
22 /** Nastavíme reakci na signál SIGTERM */
23 signal(SIGTERM, zpracujSignal);
24 signal(SIGINT, zpracujSignal);
26 /** Nastavíme vlastnosti fronty */
27 mq_vlastnosti.mq_maxmsg = POCET_ZPRAV_VE_FRONTE;
28 mq_vlastnosti.mq_msgsize = DELKA_ZPRAVY;
30 /** Program pracuje buď v režimu přijímání nebo odesílání */
31 if (isOdesilaciRezim()) {
37 /** Sem se nedostaneme – program končí, až když dostane patřičný signál. */
38 return (EXIT_SUCCESS);
41 bool isOdesilaciRezim() {
43 cout << "Zvolte režim: (p)řijímací / (o)desílací" << endl;
45 char odpoved = cin.get();
50 } else if (odpoved == 'p') {
53 return isOdesilaciRezim();
58 cout << "Odesíláme…" << endl;
60 mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti);
62 char zprava[] = "zpráva";
64 int vysledek = mq_send(fronta, zprava, strlen(zprava) + 1, 0);
66 cout << "Zpráva odeslána." << endl;
68 cout << "Při odesílání zprávy došlo k chybě." << endl;
75 cout << "Přijímáme…" << endl;
77 mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDONLY);
78 char s[DELKA_ZPRAVY + 1];
79 s[DELKA_ZPRAVY] = '\0';
80 if (mq_receive(fronta, s, DELKA_ZPRAVY, NULL) > 0) {
81 printf("Přijatá zpráva: %s\n", s);
83 cout << "Nepodařilo se přijmout zprávu." << endl;
89 void zpracujSignal(int signal) {
90 if (signal == SIGTERM || signal == SIGINT) {
91 cout << "Končím program na základě signálu " << signal << "." << endl;