DataMagicとユーザプロセス間での排他制御

業務アプリケーション作成時に、DataMagicとの間でファイルの排他制御を行う必要が発生した場合、下記の方法で行えます。

 

Windowsの場合は、DataMagicでは入力ファイル、エラーファイルは共有ありでオープンします。出力ファイルへのアクセスはミューテックスオブジェクトによるロックをかけずに共有なし(書き込み禁止)でオープンします。業務アプリケーションで出力ファイルに対して排他制御を行いたい場合は、ファイルのアクセス許可情報を確認の上、読み込みおよび書き込みを行うようにしてください。

 

UNIXの場合は、入力ファイル、出力ファイル、エラーファイルに対するロックの方法としてDataMagicでは、lockf()関数(詳細はOSごとのオンラインマニュアル参照)を使用しています。業務アプリケーションで入出力ファイルなどに対して排他制御を行いたい場合は、同じようにlockf()関数を使用してください。

<排他制御を行うプログラム例(UNIX/Linux向け)>

#include <fcntl.h>
#include <unistd.h>
 
int main(void)
{
    int fd;
 
    fd = open("outfile.dat", O_RDWR|O_CREAT, 0666);
    if (fd == -1){
        perror("open");
        return 1;
    }
    if (lockf(fd, F_LOCK, 0) == -1) {
        perror("lockf");
        return 1;
    }
    /*
     * file read and/or file write
     */
    lockf(fd, F_ULOCK, 0);
    close(fd);
    return 0;
}