SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

COBOLプログラミング

OpenCOBOLと他言語の連携

C言語で作成したモジュールとの連携方法

  • X ポスト
  • このエントリーをはてなブックマークに追加

プログラム連携の実際 その2

 メイン処理をCで作成し、連携先プログラムをOpenCOBOLで作成した場合のプログラム連携の機能について確認します。

サンプルプログラムの内容

 「プログラム連携の実際 その1」と処理内容は同じです。

メイン処理プログラムの内容

 「プログラム連携の実際 その1」のメイン処理同様、メイン処理のプログラムではMAIN PROD(C)を表示し、連携先プログラムで表示する内容を設定します。連携先プログラムの実行終了後に、連携先プログラムで更新された内 容を表示します。なお、プログラムの開始時と終了時にそれぞれMAIN-STARTMAIN-STOPをあわせて表示します。

 ソースの内容は次のとおりです。

メイン処理のプログラムソース
#include <stdio.h>
#include <libcob.h>
typedef struct {
        int cnt;
        char msg[20];
} linkage_section;
extern int csubcob(linkage_section *sub_snd);
int main(int argc,char **argv) {
        linkage_section sub_snd = {10,"SUB PROD(COBOL)"};
        cob_init (0,NULL);
        printf("MAIN-START\nMAIN PROD(C)\n");
        csubcob(&sub_snd);
        printf("MAIN-END\n");
}

 連携先プログラムがOpenCOBOLであり、OpenCOBOLライブラリを使用するため、プロトタイプ宣言取り込みと初期処理関数を使用しています。

 また、連携先プログラムを外部関数として定義しています。

連携先プログラムの内容

 連携先プログラムでは、メイン処理プログラムで設定した値であるSUB PROD(COBOL)と数値を表示させるようにします。数値のみ1減算しプログラムを終了します。

 ソースの内容は次のとおりです。

連携先のプログラムソース
000100*COPYRIGHT FUSEKAKO
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID.        csubcob.
000400 ENVIRONMENT DIVISION.
000500 DATA DIVISION.
000600 LINKAGE SECTION.
000700 01  SUB-REC.
000800     03 CNT PIC 9(5) COMP-5.
000900     03 MSG PIC X(20).
001000 PROCEDURE DIVISION USING SUB-REC.
001100 DISPLAY "SUB-START "
001200 DISPLAY MSG WITH NO ADVANCING.
001300 DISPLAY CNT.
001400 SUBTRACT 1 FROM CNT.
001500 DISPLAY "SUB-END".
001600 EXIT PROGRAM.

 メイン処理で定義したint型数値項目を使用するために数値項目の定義がCOMP-5になっている点を除き、前回の記事で説明した連携先プログラムと同じ内容になっています。

 順序番号000300のPROGRAM-IDは、メイン処理で外部関数定義した名称と同じにします。

サンプルプログラムのコンパイル

 コンパイル方法は「プログラム連携の実際 その1」で説明した内容と同様です。以下は、メイン処理プログラム名を「cmainc.c」、連携先プログラム名を「csubcob.cob」とした例です。

直接実行型ファイルを作成するコンパイル例
/usr/local/bin/cobc -x -o cmaincexe cmainc.c csubcob.cob
分割コンパイルによる実行型ファイルを作成するコンパイル例
/usr/local/bin/cobc -c -x -o cmainc.o cmainc.c
/usr/local/bin/cobc -c -o -o csubcob.o csubcob.cob
/usr/local/bin/cobc -x -o cmaincbin cmainc.o csubcob.o

 コンパイルに問題が無ければ、直接実行型ファイルを作成するコンパイル例では「cmaincexe」が、分割コンパイルによる実行型ファイルを作成するコンパイル例では、それぞれ「cmainc.o」「csubcob.o」「cmaincbin」が作成されます。

サンプルプログラムの実行

 前項で作成した実行型ファイルを実行します。実行例は次のとおりです。

実行例
[e-fuse@]$ ./cmaincexe
MAIN-START
MAIN PROD(C)
SUB-START
SUB PROD(COBOL)00010
SUB-END
9
MAIN-STOP
[e-fuse@]$

 意図した内容で表示される事が確認できます。

まとめ

 今回は連携する言語としてCを選定しましたが、オブジェクト出力可能なコンパイラが用意されている言語であれば、同様に連携することができます。OpenCOBOLによる開発も十分使用に耐えることが、ご理解いただけたかと思います。

 次回は、OpenCOBOLとPostgreSQLの連携について稿を進めたいと思います。

参考

  1. OpenCOBOL Manual:OpenCOBOL
  2. COBOLプログラミング 基本編 :CodeZine(基本的なCOBOL言語の解説)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
COBOLプログラミング連載記事一覧

もっと読む

この記事の著者

布施 榮一(ふせえいいち)

布施加工有限会社 代表取締役布施加工って何しているとこなの??実はIT屋さんだったりします(笑)Linux基盤各種サービスの設計構築およびコンサルティングをやっています。ブログもちょこちょこっと書いてます。Alinous-Core 正規販売代理店

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2951 2008/09/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング