5
votes

how would I implement communication between Linux programs written in C? Specifically, I want the following:

My program can run in multiple instances. Upon startup, I want that my program detects all other instances of my program that are already running and then it should be able to send a text string to them. On the other hand, I also want that the instances that are already running get notified that a new instance has been started and they should also be able to send a text string to the new instance.

Could someone point me to some APIs which could be used to implement such a software design on Linux? On Windows, I can simply enumerate over all windows, check their class names to find out all instances of my program, and then register a custom message with the system that I can use to send data to them. But how would I do this on Linux?

Thanks for any hints!

4
I like the use of the word "simply" in your third paragraph. ;-) - mpontillo
I think "simply" is OP's word for "fragilely". :-) - R.. GitHub STOP HELPING ICE
Well, I think simply (again!) using EnumWindows() and comparing the class names is as simple as it can get. The named pipe thingy sounds much more complicated in my ears but that's surely a matter of taste ;) - Andreas

4 Answers

4
votes

You have a lot of options:

  • Named pipes;
  • Msg commands (msgget, msgsend);
  • Using TCP sockets;
  • Using UNIX domain sockets;
  • Using a third party broker, like DBus or ActiveMQ;

If it is for a standalone machine, and only one stream of data, I would recommend the option number 1.

1
votes
0
votes

I have used sockets and multicast for that very purpose. This allows distribution of processes among several computers on the same LAN.