Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica >

MathLink を使った Mathematica セッション間の通信

LinkCreate["name"]別プログラムと通信するためのリンクを作成する
LinkConnect["name"]別プログラムで作成されたリンクと接続する
LinkClose[link]MathLink コネクションを閉じる
LinkWrite[link,expr]式をMathLink コネクションに書き込む
LinkRead[link]MathLink コネクションから式を読み出す
LinkRead[link,Hold]式を読み出し,即座にその式をHoldで包み込む
LinkReadyQ[link]リンクに読出し可能なデータがあるかどうかをチェックする
LinkReadyQ[link,t]式が読む準備ができているかどうかを調べるのにt 秒まで待つ
LinkReadyQ[{link1,link2,...}]リンクのうちのひとつから読む準備のできたデータがあるかどうかを調べる
LinkReadyQ[{link1,link2,...},t]式が読む準備ができているかどうかを調べるのにt 秒まで待つ

Mathematica セッション間のMathLink コネクション

セッション A
8000番のポートでリンクをスタートさせる.
In[1]:=
Click for copyable input
Out[1]=
セッション B
8000番ポートのリンクと接続する.
In[2]:=
Click for copyable input
Out[2]=
セッション A
15!を評価し,リンクにそれを書き込む.
In[3]:=
Click for copyable input
セッション B
リンクから読み出すと送信した15!が得られる.
In[4]:=
Click for copyable input
Out[4]=
リンクにデータを書き戻す.
In[5]:=
Click for copyable input
セッション A
セッションBで書き込んだデータを読み出す.
In[6]:=
Click for copyable input
Out[6]=
MathLink コネクションを使えば,Mathematica セッション間の中間ファイルを使わないデータ転送が可能になる.
その他の使い道としては,計算の一部を別のセッションに送ることがある.
セッション A
2+2を評価せずにリンクに書き込む.
In[7]:=
Click for copyable input
セッション B
リンクから式を読み出し,即座にHoldで包み込む.
In[8]:=
Click for copyable input
Out[8]=
式を評価する.
In[9]:=
Click for copyable input
Out[9]=
LinkWriteを呼び出すと,式をMathLink コネクションに書き込んだ後,直ちに戻る.しかし,LinkReadMathLink コネクションから式を完全に読み出すまで戻らない.
読出しが可能かどうかをLinkReadyQ[link]の呼出しで知ることができる.LinkReadyQTrueを返したら,安全にLinkReadを呼び出し,式を読み込むことができる.LinkReadyQFalseを返した場合,LinkReadは読み出すべき式をもう一方のMathematica セッションのLinkWriteが書き込むまでブロックする.
セッション A
読まれるべきものがリンク上にない.LinkReadが呼ばれると,ブロックする.
In[10]:=
Click for copyable input
Out[10]=
セッション B
リンクに式を書く.
In[11]:=
Click for copyable input
セッション A
読出しを待っている式がリンク上に存在する.
In[12]:=
Click for copyable input
Out[12]=
LinkReadをブロックされる恐れなしに呼び出すことができる.
In[13]:=
Click for copyable input
Out[13]=
LinkReadyQはリンクオブジェクトのリストを取り,読むデータがあるかどうかを判断するために各リンクを並列で評価することができる.単独のリンクの場合のように,第2引数でタイムアウトの周期を指定するため,LinkReadyQはリンクのいずれかが使う準備ができるまで待つことになる.
LinkCreate[LinkProtocol->"TCPIP"]コンピュータが使用していないポートを取得する
LinkCreate["number",LinkProtocol->"TCPIP"]
特定のポートを使用する
LinkConnect["number",LinkProtocol->"TCPIP"]
同一コンピュータのポートに接続する
LinkConnect["number@host",LinkProtocol->"TCPIP"]
別のコンピュータのポートに接続する

TCP/IPでMathLink のリンクを設定する方法

コンピュータシステムがサポートしていれば,いかなるプログラム間通信のメカニズムでもMathLink は利用することができる.並列するMathematica セッション間のコネクションを確立するには,インターネットのTCPポートを利用することが一般的である.
ほとんどのコンピュータシステムには利用可能なポートが数千個あり,そのうちのいくつかは標準的なサービスにすでに利用されている.
未使用のポートはMathLink コネクションに使うことができる.
frog.wolfram.com上のセッション
frog.wolfram.comが使用していないポートを見付ける.
In[14]:=
Click for copyable input
Out[14]=
toad.wolfram.com上のセッション
frog.wolfram.comのポートに接続する.
In[15]:=
Click for copyable input
Out[15]=
マシン名をリンク上で転送する.
In[16]:=
Click for copyable input
frog.wolfram.com上のセッション
toadに書かれた式を読む.
In[17]:=
Click for copyable input
Out[17]=
インターネットのポートをMathLink コネクションに利用すれば,異なるMathematica セッション間でのデータ転送を簡単に行うことができる.インターネットのコネクションが転送を実行するマシン間にあればよい.
MathLink は全くシステムに依存していないため,MathLink コネクションの両端のコンピュータが同一の種類である必要はない.ただし,実際のリンクでは,コンピュータの機種の違いからくるデータ形式の違い等に対処するためにMathLink 内で転送処理に対する最適化が図られる.
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team