INTERPROCESS COMMUNICATION (IPC) — BRIEF OUTLINE
Interprocess Communication (IPC) refers to mechanisms that allow processes to exchange data and coordinate their execution. In Linux/UNIX systems, several IPC mechanisms exist, each suited for different communication needs.
The three most commonly used IPC mechanisms are:

-------------------------------------------
1. Pipes
Overview
Pipes provide a unidirectional communication channel between related processes, typically a parent and child.

Data flows in a first-in-first-out (FIFO) manner, similar to a queue.

Implemented using the pipe() system call.

Acts like an in-memory file used for communication.

Characteristics
Half-duplex: data flows in only one direction.

Requires a parent-child relation (for unnamed pipes).

Uses file descriptors:

fd[0] → read end

fd[1] → write end

Use Cases
Simple data transfer between parent and child processes.

Passing small amounts of data such as computation results.

Shell pipelines (ls | grep txt).


--------------------------------------------
2. Message Queues
Overview
Message queues allow processes to exchange structured messages.

Data is stored in the queue until the receiving process reads it.

Identified using a key via msgget(), msgsnd(), and msgrcv().

Characteristics
Support for asynchronous communication (receiver does not need to wait).

Multiple processes can read/write messages.

Messages are grouped by message type, allowing selective retrieval.

Kernel manages the queue memory.

Advantages
Allows communication between unrelated processes.

Supports prioritization via message types.

Suitable for larger and structured data.

Use Cases
Server-client communication.

Logging systems.

Multi-process applications requiring asynchronous messaging.

----------------------------------------------
3. Shared Memory
Overview
Shared memory allows multiple processes to access the same memory region.

Fastest IPC mechanism because data is not copied between processes.

Created using shmget(), attached using shmat(), and detached with shmdt().

Characteristics
Provides bidirectional communication.

Requires synchronization mechanisms (semaphores, mutexes) to prevent race conditions.

Efficient for large data transfers.

Advantages
Maximum speed — processes read/write directly in memory.

Ideal for real-time data exchange.

Limitations
No built-in synchronization—must use semaphores to avoid concurrent access issues.

Memory region persists until explicitly removed.

Use Cases
Large data sharing between multiple processes.

Producer–consumer implementations.

Shared buffers in high-performance applications.


----------------------------------------------
Comparison Summary
Feature	Pipes	Message Queues	Shared Memory
Direction	Unidirectional	Bidirectional	Bidirectional
Relation needed	Related (unnamed pipe)	Unrelated possible	Unrelated possible
Data Style	Stream of bytes	Structured messages	Raw memory
Speed	Medium	Slow–Medium	Fastest
Synchronization	Not required	Not required	Required
Capacity	Limited	Moderately large	Very large
Summary
Pipes → simple, parent-child, stream-based communication.

Message Queues → asynchronous, structured messages, suitable for multi-process systems.

Shared Memory → fastest IPC, used for large data, but needs synchronization.
