I have learnt below IPC mechanisms,

  • BSD style half-duplex pipes

  • SYSV style message queues

  • SYSV style semaphore sets

  • SYSV style shared memory segments

  • BSD style sockets

Half-duplex pipe can be used as 1-1 process communication, one-way. Any connected process must share a related ancestory. pipe() allow communication between processes, within a system.

Message queue(linked list) can be used as 1-1 process communication, bi-directional between any two processes(long mtype) within a system. For every msgsnd() from one process creates an item in queue(linked list), corresponding msgrcv() from another process read/delete the queue item.

enter image description here

Shared memory can be used as a many-many process communication, bi-directional, within a system. Internally, it is a mapping of an area (segment) of memory that will be mapped and shared by more than one process.

enter image description here

BSD socket(socket()/bind()/listen()/accept()) can be used for many(client)-one(server) two-way communication across systems with different OS, but in a client-server mode.



Across systems with similar OS, what is the IPC mechanism(provided by Linux) for many-many process communication, in non client-server mode?


Across systems with different OS, what is the IPC mechanism(provided by Linux) for many-many process communication, in non client-server mode?

  • What is your definition of client server?
    – icarus
    Jan 24, 2017 at 0:33
  • @icarus Client, I mean, a process 1) placing connect() request on TCP/IP stack and read()/write() 2) talks directly to server(struct sockaddr_in) on UDP/IP stack and sendto()/recvfrom(). Server, I mean, a process, which listen()/accept() to requests from client Jan 24, 2017 at 0:35

1 Answer 1


Given your definitions I would go with files including named pipes in a shared filesystem. The 9p protocol in particular was designed to do this, where programs would export virtual filesystems a d react to events.

Not sure why you left named pipes off your original list.

  • If one process populate data thru named pipe, Can multiple processes get that data? or Can single process get that data? Jan 24, 2017 at 3:28
  • @overexchange, No - something reading a named pipe removes that data, just like a pipe created with pipe()
    – icarus
    Jan 24, 2017 at 3:43
  • How does corba work? I think that is non client server model? Across different OS Jan 24, 2017 at 9:05
  • corba is a much higher level, typically implemented on top of tcp sockets so by your definition is cliwnt-server.
    – icarus
    Jan 24, 2017 at 9:23
  • Is there a client-server definition, other than I mentioned(above)? Jan 24, 2017 at 9:37

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .