olayinkaadeleye / Calculator

A client server application which uses posix shared memory.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Calculator

A client server application which uses posix shared memory.

Task Objectives

Use C/C++ programming language to develop 1 server application and 2 client applications for Linux that communicate via IPC (shared memory) and perform basic operations:

• math operations with 32-bit signed integers

i. add 2 numbers

ii. subtract 2 numbers

iii. multiply 2 numbers

iv. divide 2 numbers

• string operations (strings with length between 1 and 16 characters)

i. concatenate 2 strings

ii. search for substring within a string (return the position of the substring)

Implementation Guidelines

Communication Library

The developer must implement a shared library (.so) for Inter-Process Communication (IPC). This includes:

• creating a dedicated shared memory for the data transfer (IPC);

• creating shared memory mapping between the processes;

• defining a format for data transfers over the shared memory communication channel;

implementing synchronous (add, subtract) and asynchronous (multiply, divide, concatenate, search) function calls over the communication channel to the clients;

• synchronizing the access to the shared memory between the processes (use mutexes, semaphores, named semaphores, conditional variables);

• using separate POSIX threads for each message processing (one thread for each command).

Server Application

The server must use the communication library to exchange requests and responses with his clients. The server implementation must include separate POSIX thread for different command types (1 thread for math & 1 thread for string operations).

Client Applications

The 2 client applications must provide the following functionality:

• the 1st client application must implement the operations “add 2 numbers”, “multiply 2 numbers” and “concatenate 2 strings”;

• the 1st client application must use the shared library directly (rely on the process loader for loading & linking);

• the 2nd client application must implement the operations “subtract 2 numbers”, “divide 2 numbers” and “search for substring within a string”;

• the 2nd client application must load the shared library in runtime (using dlopen(), dlclose(), dlsym()).

The 2 applications must provide a simple command line user interface for demonstrating the functionality.

Project files

• ipc_defs.hpp (header file that will be used both from the server application and from the libcomm.so library) • comm_lib.hpp • comm_lib.cpp • server.cpp • client1.cpp • client2.cpp • (optional) Makefile

Project compilation and demonstration The whole project (3 applications) must be compiled with GCC and GNU Make in the Linux text console by typing the following command:

make clean all

The compilation process must produce the following files for the Linux applications (including the shared library): • libcomm.so • server • client1 • client2

These applications can be demonstrated in a Linux text console with a simple command-line user interface: For client 1 (1) Add 2 numbers (2) Multiply 2 numbers (3) Concatenate 2 strings (4) Exit

Enter command: 1 Enter number 1: 42 Enter number 2: 37 Sending request… Receiving request… Result is 79!

Another usecase for Client 1 could be(can be simulated with a small delay in the server while processing two numbers multiplication):

(1) Add 2 numbers

(2) Multiply 2 numbers

(3) Concatenate 2 strings

(4) Exit

Enter command: 2

Enter number 1: 7

Enter number 2: 8

Sending request (7*8) …

(1) Add 2 numbers

(2) Multiply 2 numbers

(3) Concatenate 2 strings

(4) Exit

Enter command: 3

Enter number 1: a

Enter number 2: b

Sending request concat(a,b) …

(1) Add 2 numbers

(2) Multiply 2 numbers

(3) Concatenate 2 strings

(4) Exit

Receiving request from (7*8) command

Result from (7*8) is 56!

Receiving request from concat(a,b) command

Result from concat(a,b) is ab!

Enter command:

For client 2

(1) Subtract 2 numbers

(2) Divide 2 numbers

(3) Find substring in a string

(4) Exit

Following usecase can be referred:

Enter command: 3

Enter substring: lo

Enter string: Hello!

Sending request…

Receiving request…

Result is : 3 (if substring was not found print NULL)

About

A client server application which uses posix shared memory.


Languages

Language:C++ 98.7%Language:Makefile 1.3%