C/400

103. API : QP2SHELL を使って zip 圧縮を行なう

ここでは PASE 環境(UNIX との互換の環境) のSHELLコマンドの実行の方法と
IBM System i 上での zip圧縮の方法を API: QP2SHELL を使って実現する方法を
一気に紹介しよう。

STRQSH コマンドで対話式で PASE 環境を起動して、SHELLコマンドを実行する方法は
よく知られているがバッチで プログラムから SHELLコマンドを簡単に起動する方法は
ほとんど紹介されていない。
何やら IBM が公開しているAPI: QP2SHELL を使えばできそうではあるが
実際にやってみるとかなり骨が折れて容易には QP2SHELL API は動作してくれない。

さらに同時に zip 圧縮の方法もここで紹介する。
System i で zip圧縮を実現するには OS Ver7.1 で ZIP のための API として

QzipZip, QzipUnzip

が提供されているが、PTF を適用しなければならない。
これも面倒な話で、一般的な方法とは言えない。

IBM System i で zip圧縮を実現するには、次の3つの方法がある。

1. GNU Zip を導入する。

GNU サイトから System i 用の GNU Zip をダウンロードして導入する。
GNU サイトとは無償で公開されているフリー・ソフトのサイトである。

2. zlib を導入する

PHP 用に公開されている zlib をダウンロードして導入する。

3. SHELL : jar コマンドを実行する

SHELL コマンド: jar を実行して、 zip を作成する。
jar コマンドは一般的には jarファイルを生成するためのものであるが
jar ファイルとは zip ファイルそのものであるので
zip ファイルを作成するのに jar コマンドを利用することができる。

- 1.と 2. の場合はWebサイトよりダウンロードして導入する、というものでこれらは
やはり面倒な手続きを必要とするし、何より業務として使用するには OS のリリース・アップや
System i の入れ替え時にも再導入の必要が出てくるのは、心配の種が増えようというものである。
3. の jar コマンドを利用する方法は、

  • ・ PASE 環境が導入されていること

  • ・ Java が導入されていること

が、必要条件とはなるが今では OS V5R1M0 以降であればほとんどの System iでは PASE 環境も
Java も導入されているはずであるので問題はない、と予想できる。
3. の SHELL コマンドを使う方法であれば、System i に導入の必要が一切、ない。
問題はどのように SHELL コマンドを使うか、そして zip圧縮を実現するか、である。
それをこの章で紹介していく。

【 TESTQSH: /ITSフォルダー以下のIFSファイルをすべて /TEST/ITS.zip
  として圧縮するサンプル 】
0001.00 #include <stdio.h>                                                        
0002.00 #include <stdlib.h>                                                       
0003.00 #include <string.h>                                                       
0004.00 #include <qp2shell.h>                                                     
0005.00                                                                           
0006.00 #define TRUE         0                                                    
0007.00 #define FALSE       -1                                                    
0008.00                                                                           
0009.00 void main(void){                                                          
0010.00    printf("** TESTQSH : jar コマンドによる圧縮テスト **\n");              
0011.00    printf("/ITS 以下を /TEST/ITS.zip として圧縮します。 \n");             
0012.00    getchar();                                                             
0013.00                                                                           
0014.00   QP2SHELL("/QOpenSys/bin/jar", "cvf", "/TEST/ITS.zip", "/ITS");          
0015.00 }                                                                         
【 解説 】

STRQSH による PASE 環境において /ITS 以下をまとめて /TEST/ITS.zip として zip圧縮するのであれば

jar cvf /TEST/ITZ.zip /ITS

のように実行すればよい。
jar コマンドに続く cvf は圧縮することを指示している。解凍であれば xvf を指示する。
つまり圧縮であれば、

jar cvf (圧縮先のファイル名) (圧縮する元のフォルダー名)

の形式である。

( jar コマンドの使用方法については、 http://msugai.fc2web.com/java/jar.html を参照のこと )

API: QP2SHELL の使用方法は

QP2SHELL("SHELLコマンド", "第1パラメータ", "第2パラメータ", .... )

という具合である。このことは API: QP2SHELL のIBM の解説にはわかりやすい解説もないし、
例もないので 実際の実行に手間取ってしまうのである。

このように答えとしての方法を知ってしまえば zip圧縮は非常に簡単に実行することができる。
PTF や Webサイトからツールを導入するよりは、はるかに簡単に実現することができる。

【補足】 上記のプログラムは CCSID 5035 の環境において実行すること。