最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.32.ライブラリーリスト

[ Previous ] [ HOME ] [ Upper ] [ Next ]


オンラインマニュアルはここを見てください。

ライブラリー(*LIB)ってなんだっけ

さて、また重要なオブジェクト。それは、ライブラリーです。覚えていますか?そう、オブジェクトの登録簿でしたね。まあ、パソコンで言えば、フォルダーです。ただし、フォルダーの中にフォルダーを作るようなことはできません。ライブラリーの中にライブラリーを作ることはできません。

ライブラリーリスト(*LIBL)はなぜ必要か

さて、環境の属性に、最も重要なものがあります。それはライブラリーリストです。これは、昔のPC DOSで言うところの、「パス」にあたります。AUTOEXC.BATに path=xxxxxxxxxxとディレクトリ名を入れていきましたよね。あれです。ライブラリーがオブジェクトの登録簿なら、ライブラリーリストは、そのライブラリーをセットにしてまとめたものです。ライブラリーリストの役割は、

あるジョブ内において、あるオブジェクトの場所を、OSが探索する経路、を予め決める

と言うことです。これはとても大事なので、忘れないでください。きっと、今は、具体的に、何を言われているのか分からないと思いますが、暗記しておいてください。

誰が、何を、どこで、探すの?

オブジェクト探索の「オブジェクト」は、主に、「プログラム」「ファイル」です。勿論他にもたくさんあります。最初は、この2つに注して置いてください。そのうち嫌でも、たくさんのオブジェクトが、このライブラリーリストで検索されることを、知ることになります。そうそう、「検索」するのは、OSですよ。何も指定が無ければ、探す「よすが」が無いので、探すパスをセットアップしなくてはならない、ただそれだけのことです。そのパスの内容は、ジョブ単位に行われます。ジョブとは、対話型ジョブなら、サインオンからサインオフまで、バッチジョブなら、SBMJOBからジョブ終了まで、ということでしたね。そのジョブの属性の中には、前回お話したOUTQのほかに、日付や、ユーザー名や、実行優先順位、とか、たくさんあります。

その中のひとつに、*LIBLがあります。下の画面は、DSPJOBの画面を加工したものです。13番にライブラリーリストの表示がありますね。活動状態の場合、とは、SBMJOBで、JOBQで待っている場合には出てきません。え?分からない?まだ説明してないでしたね。バッチジョブに関しては、もう少ししてから説明しましょう。今は、意味は気にせず、用語に慣れる程度でいいでしょう。

ジョブの表示                                   
                                                          システム :   COLOSSUS 
 ジョブ :   IEEE802        ユーザー :   KAKEFUDA       番号 :   042754          
                                                                                
 次の中から1つを選んでください。                                               
                                                                                
      1. ジョブ状況属性の表示                                                   
      2. ジョブ定義属性の表示                                                   
      3. ジョブ実行属性の表示(活動状態の場合)                                 
      4. スプール・ファイルの表示                                               
                                                                                
     10. ジョブ・ログの表示(活動状態またはジョブ待ち行列上の場合)             
     11. 呼出しスタックの表示(活動状態の場合)                                 
     12. ロックの表示(活動状態の場合)                                         
     13. ライブラリー・リストの表示(活動状態の場合)                           
     14. オープンされたファイルの表示(活動状態の場合)                         
     15. ファイル一時変更の表示(活動状態の場合)                               
     16. コミットメント制御状況の表示(活動状態の場合)                         
     17. 通信状況の表示(活動状態の場合)                                       
     18. 活動化グループの表示(活動状態の場合)                                 
     19. 相互除外の表示(活動状態の場合)                                       
     20. スレッドの表示(活動状態の場合)                                       
     21. 媒体ライブラリー属性の表示(活動状態の場合)                           
                                                                                
     30. 上記のすべて                                                           
 
                                                                          終り  
 選択項目                                                                       
                                                                                
                                                                                
 F3= 終了   F12= 取消し 

ライブラリーリストの中身

ライブラリーリストを見るコマンドは、DSPLIBLです。

MAIN                       AS/400 メイン・メニュー                             
                                                          システム :   COLOSSUS 
 次の中から1つを選んでください。                                               
                                                                                
      1. ユーザー・タスク                                                       
      2. オフィス・タスク                                                       
      3. 汎用システム・タスク                                                   
      4. ファイル,ライブラリー,およびフォルダー                               
      5. プログラミング                                                         
      6. 通信                                                                   
      7. システムの定義または変更                                               
      8. 問題処理                                                               
      9. メニューの表示                                                         
     10. 情報援助オプション                                                     
     11. クライアント・アクセス /400 タスク                                     
                                                                                
     90. サイン・オフ                                                           
                                                                                
 選択項目またはコマンド                                                         
 ===> DSPLIBL                                                                   
                                                                                
 F3= 終了   F4=プロンプト   F9=コマンド の複写   F12= 取消し   F13= 情報援助          
 F23= 初期 メニュー の設定                                                          
                                                                                

実行キー

ライブラリー・リスト表示                            
                                                          システム :   COLOSSUS 
                                                                                
                                                                                
 オプションを入力して,実行キーを押してください。                               
   5= ライブラリー中のオブジェクトの表示                                        
                                                                                
 OPT   ライブラリー   タイプ    テキスト                                       
        QSYS          SYS        システム・ライブラリー                         
        QSYS2         SYS       CPI のシステム・ライブラリー                    
        QHLPSYS       SYS                                                       
        QUSRSYS       SYS                                                       
        QEVX          SYS                                                       
        TKLIB         CUR       MY OWN LIB                                      
        QGPL          USR                                                       
        QTEMP         USR                                                       
        TKLIB         USR       MY OWN LIB                                      
        IPLTEMP       USR       THIS IS CLEARED IN IPL PROCESS                  
                                                                                
                                                                                
                                                                                
                                                                          終り  
 F3= 終了   F12= 取消し   F17= 最上部   F18= 最下部                             
 (C) COPYRIGHT IBM CORP. 1980, 2000.                                            

よく見ると、「タイプ」と出ていて、SYS, CUR, USR が出ていますね。ここでは出ていませんが、この他にPRD(プロダクト)があります。

SYS(システムライブラリー)は、システムが使うオブジェクト(つまり、IBMがOSのために準備したオブジェクト)が入っている、ライブラリーのことです。たいていQで始まります。(ですので、ご自分で作るライブラリー名は、Qで始めないでください。)このSYS部分を構成するライブラリーの省略値を規定しているは、システム値QSYSLIBLです。

※この初期値のシステムライブラリーリストをジョブ単位に変更するコマンドは、CHGSYSLIBLですが、危険ですので、実行しないでください。通常、ここは、変更されないものという前提で、アプリケーションを作っているはずです。もちろん、2次言語ライブラリーを入れたり、はずしたり、する場合もありますが、これは例外的な使い方だと思います。

PRDは、やはり、IBMが準備したライブラリーで、ライブラリーリストに最大2個まで入ります。このPRDは、動的にリストに入りますので、ユーザーは一切気にしなくても、問題ありません。(でも、SYSの次にPRDがあることを記憶の片隅に置いておいてください。)

USR(ユーザーライブラリー)は、IBMではなく、ユーザーがCRTLIBなどで作ったライブラリーを意味します。

CUR(現行ライブラリー)は特殊で、必ず、SYSもしくはPRDとUSRの間に入ります。それはすなわち、かならず、USRの先頭から動かないことを意味しています。また、CRTxxなどの作成コマンドのオブジェクトの作成先のライブラリーの省略値が、*CURLIBになっています。このCURを指定しないことも可能です。その場合、*CURLIBとしては、省略値として、QGPLが使われます。

このように、ライブラリーリストは、上記4種類のライブラリーをグループ化したものです。また、探索順序として、ライブラリーリスト内の、ライブラリーの位置(最初から何番目とか、最初だとか、最後だとか)が重要な意味を持ちます。

たとえば、ライブラリーリストに、下記のようにライブラリーが指定されていると、

1. LIB_A

2. LIB_B

3. LIB_C

OSは、LIB_A → LIB_B → LIB_Cの順番に検索していきます。これは、「非常に」大切な機能です。これこそが、ライブラリーリストの存在意義です。探索ライブラリーを探索順序をつけて、保存するものです。

また、ライブラリーリストは、あくまでジョブ環境のひとつの要素であって、独立したオブジェクトではありません。(多分、OSの中では、内部オブジェクトか変数として扱うのでしょうが、ユーザーの我々は、それをオブジェクトとしては、扱えません。したがって、オブジェクトタイプはありませんし、WRKOBJでライブラリーリストは探せません。あくまで、ジョブ環境の中の環境変数の一種です。)これに対して、ライブラリーそのものは、オブジェクトです。オブジェクトタイプは、*LIBです。まとめると、

ライブラリーリストとは、

  1. ジョブ単位に存在する環境変数のひとつで、
  2. 検索されるライブラリー(オブジェクト)名と、
  3. ライブラリーの検索順序を指示するリストのこと、

となります。

ライブラリーリスト関係のコマンド

ライブラリーリストに関するコマンドは、

ADDLIBLE

    ライブラリーリストへの、ライブラリーの追加。対話型、バッチともに使用可能。

RMVLIBLE

    ライブラリーリストから、ライブラリーをはずす。対話型、バッチともに使用可能。(ライブラリーの削除ではありません)。

CHGLIBL

    ライブラリーリスト全体を一括して、置き換えます。対話型、バッチともに使用可能。

EDTLIBL

    対話型に、ライブラリーリストをEDIT=編集します。バッチ環境(画面なし)では使用不可。

DSPLIBL

    ライブラリーリストを表示します。対話型、バッチともに使用可能。

この中で、現行ライブラリーを指定できるのは、CHGLIBLです。また、現行ライブラリーは、CHGCURLIBという独立した、現行ライブラリー専用のコマンドもあります。(CHGLIBLが現行ライブラリーも指定できることは、記憶しておいてください。)

コラム

システム38時代との違いを書いて見ましょう。理解の役に立つでしょう。

システム38でも、ライブラリーリストがありました、AS/400との違いは、「現行ライブラリー」の有無だけです。上図の中で、CURというのライブラリーがありますね。これが、現行ライブラリーです。これは、システム38には無いものでした。その他の構成、システムライブラリーリスト(上図SYS)、ユーザーライブラリーリスト(上図USR)は、制限数も、AS/400、システム38とも同じです。システムライブラリーリストは15個、ユーザーライブラリーリストは、25個です。また初期値が、ジョブ記述やシステム値にあることも同じでした。システム値では、QSYSLIBL、QUSRLIBLです。

違っているのは、ライブラリーリストにかかわるコマンド類です。コマンドそのものは、考えてみれば、Man to Machineインターフェイス(古い言葉です)のひとつで、機能は大きく変わらずとも、その機能をより使いやすくしたコマンドが生まれてくれば、それはユーザーインターフェイスの向上につながるのですね。

ADDLIBLE

コマンド名は一緒ですが、システム38では、位置の指定はできませんでした。

RMVLIBLE

まったく同じです。

CHGLIBL

これは、システム38では、RPLLIBL(Replace LIBL)といっていましたが、コマンド名の動詞部分を見直しされた際に、CHGに変わりました。「置き換え」「変更」なので、「参加、入力」を意味するEntryのEが最後に付きません。(ADDLIBLE, RMVLIBLEには最後にEがつきます)。また、「現行ライブラリー」の指定もできるようになっています。

DSPLIBL

まったく同じです。

RTVJOBA LIBL(xxxx)

まったく同じです。

EDTLIBL

このような、ライブラリーリストの編集画面は、システム38では、ありませんでした。ただ、簡単に自作できたので、ある程度技術のある人は、自作していたと思います。後、気になっていましたが、どうして、WRKLIBLにしなかったのだろう、と思いましたが、よく考えてみると、これで正しかったのです。つまり、EDTxxxは、リスト編集が多いこと、また、WRKXXXは、Work with XXXの意味なので、「XXXの処理」を意味しますが、EDTLIBLは、特にオブジェクトであるライブラリー(ライブラリーリストはオブジェクトではない)を処理しないこと(その目的では、WRKLIBというコマンドはある)、を考えてみると、これでいいようです。

また、システム38では、なかった、「現行ライブラリー」は、

CHGCURLIBというコマンドで作業でき、取り出しは、RTVJOBA CURLIB(xxxxx)で可能です。CHGLIBLでも指定可能です。

初期ライブラリーリスト

また、システム値や、ジョブ記述にもライブリーリストがあります。これらは、あくまで、ジョブの開始時点の省略値を定めるものです。サインオンして、最初のライブラリーリストが、どのような経路で定まるのか、調べてみましょう。

対話型ジョブの場合

  1. ユーザ名を指定して、サインオンすると、まず、そのユーザープロファイルが調べられ、そのジョブ記述が求まります。
  2. ジョブ記述の中の、「初期ライブラリーリスト(INLLIBL)」の値が、*SYSVALの場合、システム値QUSRLIBLが調べられ、その内容が、初期ライブラリーリストとして、使われます。
  3. それ以外の場合(ライブラリーリストが指定されている)は、その内容で、初期ライブラリーリストがセットアップされます。

※なお、当初存在していたライブラリーを、ジョブ記述の初期ライブラリーリストに含めて、その後、そのライブラリーをDLTLIBで削除してしまった場合、そのジョブ記述を参照するユーザーは、サインオンできません。ご注意ください。

1. CRTLIB ABCLIB

2. CRTJOBD TESTJOBD  INLLIBL(ABCLIB)

3. CRTUSRPRF AAAA JOBD(TESTJOBD)

4. DLTLIB ABCLIB

AAAAで、サインオンできなくなります。CPF1113が出ます。

サイン・オン
                                                システム . . . . :   COLOSSUS   
                                                サブシステム . . :   INTERJPN   
                                                表示装置 . . . . :   QPADEV0003 
                                                                                
                 ユーザー . . . . . . . . . . . .   AAAA                        
                 パスワード . . . . . . . . . . .                               
                 プログラム/プロシージャー . . .                               
                 メニュー . . . . . . . . . . . .                               
                 現行ライブラリー . . . . . . . .                               
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
CPF1113 初期ライブラリー・リストにライブラリーが見つからない。                  

バッチジョブの場合

  1. コマンドSBMJOBのINLLIBLに指定された値により、ライブラリーリストは変わります。
  2. *CURRENT... SBMJOBを実行しようとしている、その時点でのライブラリーリストがコピーされて、バッチジョブの初期ライブラリーリストになる。
  3. *JOBD ... SBMJOBのJOBDに指定されたジョブ記述の中の、値で、バッチジョブの初期ライブラリーリストが定まります。
  4. *SYSVAL ... システム値のQUSRLIBLが、初期ライブラリーリストとして、使用されます。

ライブラリーリストの本質

さて、初期値が決まってから、それを土台として、ADDLIBLEやRMVLIBLE, EDTLIBLなどをしていきます。したがって、初期値が決まった後、自由にライブラリーリストを変えられるわけです。有るコマンドが、ライブラリーリストを参照するときは、そのコマンドが実行される、まさにその瞬間のライブラリーリストが、使われます。つまり、初期ライブラリーリストと同じとは限らないことになります。ご注意ください。ADDLIBLEをいたるところに入れると、手がつけられなくなります。まあ、このあたりは、アプリケーションの設計思想に連なる部分ですので、予備校では、ライブラリーリストの役目だけ、しっかり、理解してください。

「有るコマンドが、ライブラリーリストを参照する」とは、たとえば、CALLと入力して、F4を押すとわかります。

プログラム呼出し  (CALL) 
                                                                                
  選択項目を入力して,実行キーを押してください。                                
                                                                                
  プログラム  . . . . . . . . . . PGM                                           
    ライブラリー  . . . . . . . .                  *LIBL                        
  パラメーター  . . . . . . . . . PARM                                          
                                                                                
                            値の続きは+                                        
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                         終り   
 F3= 終了    F4=ポワ]ポn   F5= 最新表示    F12= 取消し    F13= この画面の使用法  
 F24= キーの続き                                                                
                                                                                

CALLは、RPGやCLPといったプログラム言語で作成された*PGMオブジェクトを呼び出して実行するコマンドですが、呼び出されるプログラムのライブラリーの省略値は、特定のライブラリーではなく、*LIBL(これは特殊値で、ライブラリーリストから探し出すことを意味する値)になっています。

もし、プログラム、PGMAが、ライブラリーABCLIBに有る場合、以下の2通りの呼び出し方があります。

1. ライブラリー名を直接指定して、呼び出す。(ライブラリーリストを使用しない例)

   CALL  ABCLIB/PGMA

2. ライブラリーリストから探し出して、最初に見つかったものPGMAを呼び出す。

   CALL  PGMA (= CALL *LIBL/PGMA)

となります。もし、ライブラリーリストに、PGMAが見つからないと、エラーが出ます。(下図参照)

MAIN                       AS/400 メイン・メニュー                             
                                                          システム :   COLOSSUS 
 次の中から1つを選んでください。                                               
                                                                                
      1. ユーザー・タスク                                                       
      2. オフィス・タスク                                                       
      3. 汎用システム・タスク                                                   
      4. ファイル,ライブラリー,およびフォルダー                               
      5. プログラミング                                                         
      6. 通信                                                                   
      7. システムの定義または変更                                               
      8. 問題処理                                                               
      9. メニューの表示                                                         
     10. 情報援助オプション                                                     
     11. クライアント・アクセス /400 タスク                                     
                                                                                
     90. サイン・オフ                                                           
                                                                                
 選択項目またはコマンド                                                         
 ===> CALL PGM(PGMA)                                                            
                                                                                
 F3= 終了   F4=ポワ]ポn   F9=テu]n゙ の複写   F12= 取消し   F13= 情報援助          
 F23= 初期 xpャー の設定                                                          
  ライブラリー *LIBL のプログラム PGMA が見つからない。                       + 

もし、ライブラリーABCLIBと、DEFLIBの両方にPGMAが有るとすると、探索順序が重要な意味を持ちます。

たとえば、ライブラリーリストが

  1. ABCLIB
  2. DEFLIB

の時に、CALL  PGMAを実行すれば、最初に見つかるのは、ABCLIBの中のPGMAなので、呼び出されるのは、ABCLIBのPGMAです。つまり、DEFLIBのPGMAは呼び出されないので、ここでは、無意味なことになりますね。

また、

  1. DEFLIB
  2. ABCLIB

の順番にライブラリーがライブラリーリストに、登録されているとすると、最初に見つかるのは、DEFLIBの中の、PGMAなので、呼び出されるのは、DEFLIBのPGMAとなります。ここでは、逆に、ABCLIBのPGMAは無視されてしまいますね。

ここでは、CALL命令と呼び出されるプログラム、という関係において、ライブラリーリストを説明しましたが、オブジェクトの探索に関係するものは、すべて、このライブラリーリストの支配下におかれると、思ってください。(というか、そうでないと、困るのですが。)たとえば、有るファイルをオープンして、処理をするプログラムが呼び出されたときの、そのファイルの探索なども、*LIBLが省略値として、使われます。わざと、この指定変更をしたい場合は、OVRDBFを使うことになりますが、これは別の機会にお話しましょう。

※一般的に、開発する場合、テストのしやすさから、直接ライブラリー名を指定して、呼び出すことはまれで、大体が、ライブラリーリストを使って、呼び出す形式が多いと思います。

DEFLIBがテスト用のPGMAやファイルなどを持つとすると、本番環境は、上の例ですが、DEFLIBのテスト用のPGMAやテストファイルを呼び出したければ、EDTLIBLなどで、ライブラリーリストを下の例のように書き換えて、DEFLIBを先頭に持ってきて、*LIBLで実行すれば、簡単にテストが可能です。

ここまでの、内容は、とても、重要です。必ず、反芻して、記憶してください。これがわからないと、先にいけません。

※V4R5までは、ライブラリーリストの中には、ユーザーライブラリーの部分に、25個まで、登録できましたが、V5R1からは、一気に10倍になり、250個登録できます。250番目のオブジェクトを探し出すまで、時間かからないんだろうか...?

起立、礼、着席

2002-6-4


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送