FTP
FTP:ファイル転送プログラム(File Transfer Program)
FTPそのものが何であるかを解説する必要はないでしょう。メインフレームでもTCP/IPがサポートされてから、FTPもTCPアプリケーション(ユーティリティー)として利用できるようになっています。以前はFTPの利用を嫌うユーザーも多く「TCPは使えますがFTPは禁止です」というところもありました。最近ではどうなのでしょうか?以前ほどFTPは使わせない、というところは少ないように思います。
FTPにはクライアントとサーバーの2種類がありますが、いずれも利用できます。ただしMSPではFTPサーバーの利用にはDTSというPPが別に導入されている必要がありました(もしかしたら今では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の使用サンプルはこちらのページに記載しています。