FTP

FTP(File Transfer Program:ファイル転送プログラム)そのものが何であるかを解説する必要はないでしょう。メインフレームでもTCP/IPがサポートされてから、FTPもTCPアプリケーション(ユーティリティー)として利用できるようになっています。以前は、FTPの利用を嫌うユーザーも多く「TCPは使えますがFTPは禁止です」というところもありました。最近ではどうなのでしょうか?

FTPにはクライアントとサーバーの2種類がありますが、いずれも利用できます。(MSPではFTPサーバーの利用にはDTSという別のプログラム製品が導入されている必要がありました。もしかしたら今ではTISP単独で利用可能になっているかも知れません)

メインフレームと言えばサーバー・コンピューターでもありますから、FTPもサーバーで使うもの、と思われがちですが決してそんなことはありません。むしろ、FTPはクライアントで使う方がバッチ・ジョブの処理ステップに組み込めますから、自動的なデータ転送処理を行いたいときなどに便利です。

FTPサーバーは、PC上のファイル(例えばJCLやソース・プログラム、業務処理用のデータ制御ファイルなど)を、区分データセットのメンバーや順次データセットとしてメインフレーム側に送りたい場合によく使われます。基本的には利用者が使いたいときに起動するものではなく、システムのIPL後に常駐タスク(アドレス空間)として起動されます。z/OSでは、TCPIPサービスの起動時に、FTPデーモン・プロセスがUSS(Unix System Service)によってアクティブになります。FTPサーバーに関しては、利用者各人の好みに合わせて機能を選択したり設定を変えたりはできません。システム管理者が、センター環境に合わせて設定した範囲での利用になります。

メインフレームのFTPサーバーを利用するクライアントは、同じメインフレームに限らず、Unix、WindowsなどTCPをサポートしたプラットフォームであればかまいません。

データセットとファイルパス

z/OSのHFSでなければ、MVSではUnixやWindowsのような階層ファイルシステムではありません。しかし、FTPにおけるファイル名は、階層を意識したファイル・パスでの指定になっています。例えば、MVS(z/OS)のTCPIPのFTPでは、D:/folder1/subfolder2/JCLCOPY.txt のようなファイル・パスとファイル名は、UAP1/JCLLIB/JCLCOPY のようにデータセットの修飾子で区切られたファイル・パスとして表現されます。

データセット名は、修飾子で区切られた階層によって構成されているので、それを階層型ファイルシステムのパス名のように割り当てます。データセット名の各修飾子を、フォルダー名のように扱うわけです。そのため、データセットはカタログされていることが前提です。ディレクトリ・パスUAP1/JCLLIB、ファイル名JCLCOPY は、UAP1.JCLLIB.JCLCOPY という順次データセットか、UAP1.JCLLIB という区分データセットのメンバーJCLCOPY を示します。

このように、DSNの修飾子をディレクトリーに置き換えて対応させるマッピング方法を知ることは、LSコマンドなど、ディレクトリー内のファイル一覧を表示させたい場合に役立ちます。初期ディレクトリーは、FTPサーバーにログインした際のアカウント名(TSOユーザーID)です。USERIDを RTJ6638 でログインした場合、ログイン後に LS コマンドを入れると修飾子 RTJ6638 で始まるDSNがリストされます。その状態で CD TEST と入力すれば、カレント・ディレクトリーは RTJ6638.TEST に変わり、LSコマンドを入れると修飾子 RTJ6638.TEST で始まるDSNがリストされます。先頭修飾子を UAP1 に変えたければ CD ‘UAP1’ と入力します。

しかし、GETやPUTで転送の対象となるデータセットが予めわかっているなら、最終修飾子やメンバー名がファイル名になるよう階層を掘り下げなくても、’RTJ6638.TEST.DATA1′ や ‘RTJ6638.JCL(IEBCOPY)’ のようにDSNをアポストロフィーで囲めば、メインフレームのデータセット名の形式で指定することもできます。各メーカーが提供するFTPソフトウェアの仕様によって、細かな点は異なるので必要に応じてマニュアルなどを参照して下さい。

FTPによっては、DD名をサポートしている場合もあります。例えば、z/OSではメインフレーム側のファイル名として、//DD:ddname が指定できます。これはJCLにDD名ddnameで定義されているDDステートメントに定義されたデータセットを示します。この場合、ターゲットのデータセットはカタログされていなくてもかまいません。UNITとVOL=SERパラメーターでデータセットの場所を特定することができます。VOS3のXTCPでは、DD(ddname) と指定します。また、INTRDR はJESのリーダーを示し、転送したファイルをJCLとしてサブミットする場合に使われます(z/OSでは事前にSITEコマンドが必要)。なお、DD名指定のファイル転送は、FTPクライアントで使用されます。

文字コードの変換

異なる文字コードを持つプラットフォーム間の転送では、文字コードの変換が必要です。送り手、受けてどちらが変換するかは考え方がいろいろあります。「受け手が自分と違うコードなら変換する」という仕様なら、同じ文字コードであれば変換が不要なのですっきりするとか、サーバーとクライアントならサーバー側でやるべき、とかです。しかし、現実メインフレームの場合は、送り手だろうが受け手だろうが、メインフレームが他と異なる特有の世界のコードを使っているのが実情なので、クライアントであってもメインフレーム側のFTPで文字コードを変換するのが一般的です。メインフレームのFTPでは、単にECBDICとASCIIの変換だけでなく、日本語コードをShiftJISやEUCなど相手側ホストの文字コードに合わせて変換できます。z/OSのFTPであれば、シフトコードの位置に擬似コード(文字→や←)を入れてそこにシフトコードがあることを示したり、バイナリー転送時に、可変長レコードのデータセットのRDWを付加して元のレコードが何バイトなのかを識別できるようにしたりなど、きめ細かなコード変換機能を持っています。

FTPの使用サンプルは、こちらのページに記載しています。