15.1 バイトストリーム入出力サービスルーチンの概要
バイトストリーム入出力サービスルーチンを使用すると,COBOLのレコード定義に依存しないで,Cプログラムなどで作成したバイナリファイルの読み書きができます。バイトストリーム入出力サービスルーチンの一覧を「表15‒1 バイトストリーム入出力サービスルーチンの一覧」に示します。
サービスルーチンの名称 |
機能 |
---|---|
CBLSTMCLOSE |
バイトストリーム処理用に開かれたファイルを閉じる。 |
CBLSTMCREATE |
バイトストリーム処理用の新しいファイルを作成する。 |
CBLSTMOPEN |
バイトストリーム処理用に既存のファイルを開く。 |
CBLSTMREAD |
ファイルからバイト列を読み込む。 |
CBLSTMWRITE |
ファイルへバイト列を書き出す。 |
- 〈この節の構成〉
(1) バイトストリーム入出力サービスルーチンを使用するときの注意事項
-
バイトストリーム入出力サービスルーチンが正常終了したかどうかは,RETURN-CODE特殊レジスタを参照して確認してください。
-
バイトストリーム入出力サービスルーチンは,COBOLプログラムだけから呼び出せます。COBOL以外のプログラムから呼び出されたときの動作は保証しません。
-
引数を誤って指定したり,省略したりしたときの動作は保証しません。
-
初期化属性プログラムが呼び出された場合,バイトストリームファイルの状態は初期化されません。また,CANCEL文を実行しても,バイトストリームファイルの状態は取り消されません。
-
ラージファイル入出力機能を使用すると,バイトストリーム入出力サービスルーチンで,ラージファイル(ファイルサイズが2GB以上のファイル)を取り扱えます。ラージファイル入出力機能を使用しない場合は,ラージファイルを取り扱えません。この場合に取り扱うことができる最大ファイルサイズは,2,147,483,135バイト以内です。これを超えたサイズのファイルを読み書きした場合,結果は保証しません。
バイトストリーム入出力サービスルーチンでのラージファイル入出力機能については,「15.4 バイトストリーム入出力サービスルーチンでのラージファイル入出力機能」を参照してください。
-
バイトストリーム入出力サービスルーチンは,COBOLファイル入出力機能およびCOBOL入出力サービスルーチン※で作成した順固定長ファイルを読み書きできます。順可変長ファイルまたは順編成ファイル以外のファイル編成で作成されたファイルに対する読み書きはできません。
- 注※
-
COBOL入出力サービスルーチンとは,COBOLで作成した順ファイル,および相対ファイルにアクセスできるCBLOPENなどのサービスルーチンであり,バイトストリーム入出力サービスルーチンではありません。COBOL入出力サービスルーチンの詳細は,「13 COBOL入出力サービスルーチン」を参照してください。
-
バイトストリーム入出力サービスルーチンを使用して,固定長レコードの繰り返しとして作成したファイルは,COBOLファイル入出力機能およびCOBOL入出力サービスルーチンで,順固定長ファイルとして読み書きできます。ただし,ファイルの内容は,ユーザ側で保証してください。また,順可変長ファイルまたは順編成ファイル以外のファイル編成としては読み書きできません。
-
バイトストリーム入出力サービスルーチンは,マルチスレッド環境下では実行できません。
-
バイトストリーム入出力サービスルーチンの排他モード指定は,複数の実行単位(プロセス)でファイルを共用する場合の動作を指定します。なお,排他モードで読み込み/書き出しを禁止する場合は,OPENモードが読み込み専用であっても物理ファイルに対して書き込み権限が必要です。
-
バイトストリーム入出力サービスルーチン呼び出し時にエラーが発生したときは,COBOL実行時メッセージを出力し,RETURN-CODE特殊レジスタにエラーの要因別の値を設定します。出力される実行時メッセージについては,マニュアル「COBOL2002 メッセージ」を参照してください。
- RETURN-CODE特殊レジスタに返す値
-
0:処理が正常終了した。
負の値:引数の指定に誤りがある。
正の値:上記以外で処理中にエラーが発生した。
表15‒2 RETURN-CODE特殊レジスタに返す値とその内容 値
内容
0
処理が正常に終了した。
-1
OPENモードが1/2/3以外。
-2
排他モードが0/1/2/3以外。
-3
OPENモードが2のとき,排他モードが0または2でない。
-4
フラグが0/128以外(CBLSTMREADサービスルーチン),または0以外
(CBLSTMWRITEサービスルーチン)。
-5
相対位置に指定された値が最大値を超えている。
-6
読み書きするバイト数に指定された値が最大値を超えている。
-7
ファイル名の長さが最大値を超えている。
-8
ファイル名の指定がない。
-9
ファイルハンドルに指定された値が正しくない。
-
CBLSTMCREATEサービスルーチン,またはCBLSTMOPENサービスルーチンの場合,0でない。
-
CBLSTMREADサービスルーチン,CBLSTMWRITEサービスルーチン,またはCBLSTMCLOSEサービスルーチンの場合,CBLSTMCREATEサービスルーチン,またはCBLSTMOPENサービスルーチンで返される値ではない。
10
ファイルの終わりに達した。
30
ファイルの範囲を超えて読み込もうとした。
34
指定したファイルサイズが上限に達した。
35
ファイルが存在しないときCBLSTMOPENサービスルーチンを実行しようとした。
37
指定されたファイルではCBLSTMCREATEサービスルーチンまたはCBLSTMOPENサービスルーチンに書かれたモードは使用できない。
47
読み込み専用または読み込み/書き出しモードで開かれていないファイルに対してCBLSTMREADサービスルーチンを実行しようとした。
48
書き出しまたは読み込み/書き出しモードで開かれていないファイルに対してCBLSTMWRITEサービスルーチンを実行しようとした。
90
入出力エラーが発生した。
93
ファイルはすでに使用されている。
-