This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  MathLink und externe Programm-Kommunikation /

Spezialthema: Portabilität von MathLink-ProgrammenAufruf von Mathematica-Unterprozessen

2.12.6 Kommunizieren zwischen Mathematica-Sessionen mit MathLink

MathLink-Verbindungen zwischen Mathematica-Sessionen

Session A

Dies aktiviert einen Link an Port 8000.

In[1]:= link = LinkCreate["8000"]

Out[1]=LinkObject[8000@frog.wolfram.com, 4, 4]

Session B

Dies stellt eine Verbindung zum Link an Port 8000 her.

In[1]:=Link = LinkConnect["8000"]

Out[1]=LinkObject["8000@frog.wolfram.com", 4, 4]

Session A

Dies evaluiert 15! und schreibt es in den Link.

In[2]:=LinkWrite[link, 15!]

Session B

Dies liest vom Link und erhält die zuvor übersandten 15!.

In[2]:=LinkRead[link]

Out[2]=1307674368000

Dies schreibt Daten zurück in den Link.

In[3]:=LinkWrite[link, N[%^6]]

Session A

Und dies liest die Daten, die in Session B geschrieben wurden.

In[3]:=LinkRead[link]

Out[3]=

Eine Anwendung von MathLink-Verbindungen zwischen Mathematica-Sessionen besteht darin, Daten zu übertragen, ohne daß temporäre Dateien verwendet werden.

Eine andere Anwendung besteht darin, verschiedene Teile einer Berechnung in verschiedene Mathematica-Sessionen zu verlagern.

Session A

Dies schreibt den Ausdruck 2 + 2, ohne ihn zu evaluieren.

In[4]:=LinkWrite[link, Unevaluated[2 + 2]]

Session B

Dies liest den Ausdruck vom Link und umhüllt ihn unmittelbar mit Hold.

In[4]:=LinkRead[link, Hold]

Out[4]=Hold[2 + 2]

Dies evaluiert den Ausdruck.

In[5]:=ReleaseHold[%]

Out[5]=4

Wenn Sie LinkWrite aufrufen, schreibt es einen Ausdruck in die MathLink-Verbindung und kehrt unmittelbar zurück. Wenn Sie aber LinkRead aufrufen, wird es erst zurückkehren, nachdem aus der MathLink-Verbindung ein vollständiger Ausdruck gelesen wurde.

Durch Aufrufen von LinkReadyQ[link] läßt sich herausfinden, ob etwas gelesen werden kann. Wenn LinkReadyQ True zurückgibt, dann können Sie LinkRead sicher aufrufen und erwarten, daß sofort mit dem Lesen eines Ausdrucks begonnen wird. Aber wenn LinkReadyQ False zurückgibt, dann würde LinkRead blockieren, bis ein lesbarer Ausdruck in Ihrer anderen Mathematica-Session durch LinkWrite geschrieben worden ist.

Session A

Es ist nichts im Link, was darauf wartet, gelesen zu werden. Wenn LinkRead aufgerufen würde, würde es deshalb blockieren.

In[5]:=LinkReadyQ[link]

Out[5]=False

Session B

Dies schreibt einen Ausdruck in den Link.

In[6]:=LinkWrite[link, x + y]

Session A

Nun befindet sich im Link ein Ausdruck, der darauf wartet, gelesen zu werden.

In[6]:=LinkReadyQ[link]

Out[6]=True

LinkRead kann somit aufgerufen werden, ohne daß eine Blockierung zu befürchten ist.

In[7]:=LinkRead[link]

Out[7]=x + y

Möglichkeiten, um MathLink-Links einzurichten

MathLink kann jeden Mechanismus zur Interprogrammkommunikation verwenden, den Ihr Computersystem unterstützt. Zum Einrichten von Verbindungen zwischen gleichzeitig laufenden Mathematica-Sessionen werden meistens Internet-TCP-Ports verwendet.

Die meisten Computersysteme besitzen einige tausend numerierte mögliche Ports, von denen einige üblicherweise Standard-System-Diensten zugewiesen sind.

Sie können jeden der nicht zugewiesenen Ports für MathLink-Verbindungen verwenden.

Session on frog.wolfram.com

Dies ermittelt einen nicht zugewiesenen Port auf frog.wolfram.com.

In[8]:=link = LinkCreate[ ]

Out[8]=LinkObject["2981@frog.wolfram.com", 5, 5]

Session on toad.wolfram.com

Dies stellt eine Verbindung zum Port auf frog.wolfram.com her.

In[7]:=link = LinkConnect["2981@frog.wolfram.com"]

Out[7]=LinkObject["2981@frog.wolfram.com", 5, 5]

Dies sendet den aktuellen Rechnernamen über den Link.

In[8]:=LinkWrite[link, $MachineName]

Session on frog.wolfram.com

Dies liest den Ausdruck, der auf dem Rechner toad geschrieben wurde.

In[9]:=LinkRead[link]

Out[9]=toad

Durch die Verwendung von Internet-Ports für MathLink-Verbindungen können leicht Daten zwischen Mathematica-Sessionen auf verschiedenen Rechnern übertragen werden. Dafür wird lediglich eine existierende Internet-Verbindung zwischen den Rechnern benötigt.

Beachten Sie, daß die Computer an den Enden einer MathLink-Verbindung nicht vom gleichen Typ sein müssen, da MathLink vollständig systemunabhängig ist. Bemerkt MathLink aber, daß sie vom gleichen Typ sind, optimiert es die Datenübertragung entsprechend.

Spezialthema: Portabilität von MathLink-ProgrammenAufruf von Mathematica-Unterprozessen