# 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;
      }