> For the complete documentation index, see [llms.txt](https://dimitar-minchev.gitbook.io/linux-system-programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dimitar-minchev.gitbook.io/linux-system-programming/05_ipc/14_ipc_examples.md).

# Упражнение върху комуникация между процеси

Упражнете материалите от темата, като реализирате представените по-долу проекти.

## Reverse Encryptor Decryptor

Нека дефинираме "Reverse Encryption" (**RE**) като техника за защита на текстови съобщения, при която текста на съобщенията се обръща наобратно, преди те да бъдат изпратени по-нататък. Напишете програма **reverse-encryptor-decryptor.c**, която има два процеса, комуникиращи посредством анонимна тръба (**anonymous pipe**).

За двата процеса да валидни следните правила:

* **Родителски процес** трябва да чете текст от клавиатурата, след това да приложи техниката RE и да изпрати кодираното съобщение на **Дъщерен процес**.
* **Дъщерен процес** трябва да изчака входящите съобщения, да отпечата кодираните съобщения на екрана, след това да ги декодира и да ги съхрани във файл **reverse-encryptor-decryptor.log**.

## Encrypted Chat

Напишете двойка програми за сървър (**encrypted-chat-server.c**) и клиент (**encrypted-chat-client.c**). Сървърът трябва да имитира поведението на **Родителски процес** от предишната задача, а клиента съответно на **Дъщерен процес**. Програмите трябва да използват наименувана тръба (**named pipe**) като метод за комуникация.
