LIST
LISTコマンドは、リモートFTPサーバーからファイル名のリストを取得します。
LIST ---- PATH ----------ディレクトリ・パス-------------------->
>-- FORMAT -------- *AUTO ----------------------------->
*NAME
*UNIX
*UNIX8
*UNIX9
*ISERIES
*WINDOWS
>-- DATEFORMAT ---- *NONE ----------------------------->
*DMY
*MDY
*YMD
*YDM
>-- DATALINK ------ *PASV -----------------------------|
*PORT
キーワード
PATH |
PATHキーワードがない場合、現在のディレクトリが使用されます。パスには、オペレーティング・システムのワイルド文字を使用できます。 |
FORMAT |
省略値*AUTOは自動検出リスト形式を使用します。 · *AUTO - 自動検出リスト形式 · *NAME - NLSTサブコマンドを使用します。1列 · *UNIX - リストはUNIX形式になります。9列 · *UNIX8 - リストはUNIX形式になります。8列 · *UNIX9 - リストはUNIX形式になります。9列 · *ISERIES - リストはIBM i 形式になります。 · *WINDOWS - リストはWindows形式になります。 IBM i サーバー間でFTPを使用する場合、FTP属性のLISTFMT値を書き留めておく必要があります(CHGFTPAを使用します)。例えば、FTP属性にLISTFMT(*UNIX)が指定されている場合、LIST PATH(/TMP/*.*) FORMAT(*ISERIES)を使用すると、データは返されません。FORMAT(*UNIX)に変更する場合や、SITE COMMAND(LISTFMT 0)を使用する場合は、データが返されます。 |
DATEFORMAT |
省略値*NONEの場合、データ・フィールドに適用される形式はありません。日付形式はISO8601形式になります。 · *NONE - 日付形式なし · *DMY - 日、月、年の順になる日付を除外します。 · *MDY - 月、日、年の順になる日付を除外します。 · *YMD - 年、月、日の順になる日付を除外します。 · *YDM - 年、日、月の順になる日付を除外します。 |
DATALINK |
DATALINKキーワードにより、「コントロール」セッションの開始方法が決まります。省略値は*PASVです。 パッシブ・モード*PASVでは、FTPクライアントはサーバーに対する両方の接続を開始します。パッシブ・モードにより、FTPServiceはリモートFTPサーバーにPASVサブコマンドを送信します。FTPサーバーは開始したソケット・サーバーのポート番号を返し、このポート番号を使用してローカル・サーバーからのデータ転送チャネルが確立されます。これはパッシブFTPと呼ばれ、ファイアウォールの問題を回避する場合によく使用されます。パッシブFTPを使用すると、ローカル・サーバーは2番目の接続を確立します。これはリモートFTPサーバーに対する接続ではありません。ほとんどのファイアウォールでは、この2番目の接続によるリモートFTPサーバーへのファイル転送が許可されます(最初の接続の確立が許可される場合と同じです)。 ポート・モード*PORTにより、FTPServiceはソケット・サーバーを開始して、このソケット・サーバーがリスニングするポート番号をPORTサブコマンド経由でリモートFTPサーバーに知らせます。その後、リモートFTPサーバーはこのソケット・サーバーに接続し、データ転送チャネルが確立されます。 詳細については、「技術仕様」を参照してください。 |
コメント/警告
RDMLクライアントの場合、SERVICE_LISTキーワードを使用してリスト定義を渡す必要があります。リスト・オブジェクト引数には、1つ、2つ、または5つのフィールドが必要です。
1つのフィールドのリストを使用する場合、未処理の行がリストに追加されます。
2つのフィールドのリストを使用する場合、最初のフィールドはファイル・タイプ、2番目のフィールドはファイル名を受け取ります。
5つのフィールドのリストを使用する場合、最初のフィールドはファイル・タイプ、2番目のフィールドは日付、3番目のフィールドは時間、4番目のフィールドはサイズ、5番目のフィールドはファイル名を受け取ります。
タイプ・フィールドには以下の値を指定できます。
· F - ファイル
· D - ディレクトリ
· L - リンク
例
RDML
DEFINE FIELD(#TYPE) TYPE(*CHAR) LENGTH(1)
DEFINE FIELD(#FILE) TYPE(*CHAR) LENGTH(80)
DEF_LIST NAME(#WRKLST) FIELDS((#TYPE) (#FILE)) TYPE(*WORKING) ENTRYS(100)
USE BUILTIN(JSM_COMMAND) WITH_ARGS('LIST SERVICE_LIST(TYPE,FILE)') TO_GET(#JSMSTS #JSMMSG #WRKLST)
RDMLX
use builtin(jsmx_command) with_args(#jsmxhdle1 'list path(/tmp/*.*) format(*unix)') to_get(#jsmxsts #jsmxmsg #worklist)
ILE RPG
* NB: This MUST match the structure xml provided to the JSM Server!
d ftplist ds occurs(ftpocur)
d ftpfiltyp 1a
d ftpfilnam 255a
d ftpocur c const(9999)
d ftpsize c const(%size(ftplist))
d ftpcount s 9p 0 inz(0)
c eval jsmcmd = 'LIST'
c + ' SERVICE_STRUCTURE(FTP.FTPList)'
c + ' OCCURS(' + %char(ftpocur) + ')'
c + ' SIZE(' + %char(ftpsize) + ')'
c eval %occur(ftplist) = 1
c eval bytelength = ftpocur * ftpsize
c callp p_jsmcmdx(jsmcmd:ftplist:bytelength:
c jsmsts:jsmmsg)
c if jsmsts = 'OK'
c callp p_jsmbytelngth(bytelength)
c if (bytelength > 0)
c and (bytelength <= ftpocur * ftpsize)
c callp p_jsmbyterecv(ftplist)
c eval ftpcount = bytelength / ftpsize
c endif
c endif