データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。
すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。
opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する(6.31を参照)。これは「fcntl()」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず15
、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは16
、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。
OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。
ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。
共有オプション | 効果 |
---|---|
ALL OTHER | あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 |
NO OTHER | あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する(6.9を参照)。 |
READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 |
誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。
15
Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。
16
Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。