Named Pipes zur Interprozesskommunikation

Interprozesskommunikation unter .NET ist so eine Sache. Da gibt es unter anderem das relativ mächtige Remoting Framework. Leider schlägt sich die Mächtigkeit auch in der Komplexität nieder. Wesentlich einfach wird das ganze mittels Named Pipes welche sich auch zur Interprozesskommunikation eignen. Dazu benötigt man einen Server und einen Client. Der Server könnte dabei unter .NET so aussehen:

Task.Factory.StartNew(() =>
{
	NamedPipeServerStream server=new NamedPipeServerStream("halfPipe");
	server.WaitForConnection();
	StreamReader reader=new StreamReader(server);
	StreamWriter writer=new StreamWriter(server);

	while(true)
	{
		string line=reader.ReadLine();
		
		if(line=="HELLO")
		{
			writer.WriteLine("Hi");
			writer.Flush();
		}
		else
		{
			writer.WriteLine("Unknown command.");
			writer.Flush();
		}
	}
});

Auf der Clientseite sieht die Kommunikation fast genauso aus:

NamedPipeClientStream pipeStream=new NamedPipeClientStream("halfPipe");
pipeStream.Connect();
StreamReader reader=new StreamReader(pipeStream);
StreamWriterwriter=new StreamWriter(pipeStream);

writer.WriteLine("HELLO");
writer.Flush();

string ret=reader.ReadLine();

Damit ist die Kommunikation zwischen den Prozessen eingerichtet. Natürlich kann man nicht nur Strings sondern auch andere Datentypen über die „Named Pipes“ verschicken.

D-Bus und FSO

Heute wenden wir uns mal dem D-Bus zu. Bei dem D-Bus handelt es Framework zur Interprozesskommunikation. Oder um das ganze mal verständlich auszudrücken. D-Bus sorgt dafür das alle Anwendungen und Services sich miteinander unterhalten können :)

Beim neuen Openmoko Framework bildet der D-Bus eine Schicht auf der andere Anwendungen aufbauen können. Benötigt eine Anwendung einen bestimmten Service so fordert sie ihn über den D-Bus an. Ist der Service zu diesen Zeitpunkt nicht bereits gestartet worden, so wird der Service automatisch gestartet.

Auf dem neuen Openmoko Framework sind zwei separate Busse (na hoffentlich ist das die Mehrzahl von Bus^^) vorhanden. Beim ersten Bus handelt es sich um den Systembus für den Nutzer „root“ welcher läuft sobald das Gerät angeschaltet ist. Der zweite Bus. auch Sessionbus genannt, wird für den Benutzer gestartet, sobald X startet.

Weitere Informationen dazu gibt es unter:
http://wiki.openmoko.org/wiki/Dbus
http://de.wikipedia.org/wiki/Dbus