ファイル全体をロッキングするには、オフセットを 0 に設定し、サイズを 0 に設定します。
ファイルをロッキングするには、いくつかの方法があります。どの方法を選択するかは、ロッキングとプログラムの他の部分との関係、または性能や移植性によって決まります。次の例では、POSIX 標準互換の fcntl(2) 関数を使用します。このプログラムは、次のいずれかの状況が発生するまでファイルをロッキングしようとします。
ファイルが正常にロッキングされた
エラーが発生した
MAX_TRY 回数を超えたため、プログラムがファイルのロッキングを中止した
#include <fcntl.h> ... struct flock lck; ... lck.l_type = F_WRLCK; /* 書き込みロッキングを設定する */ lck.l_whence = 0; /* ファイルの先頭からのオフセットは l_start */ lck.l_start = (off_t)0; lck.l_len = (off_t)0; /* ファイルの最後まで */ if (fcntl(fd, F_SETLK, &lck) <0) { if (errno == EAGAIN || errno == EACCES) { (void) fprintf(stderr, "File busy try again later!¥n"); return; } perror("fcntl"); exit (2); } ... |
fcntl(2) を使用して、いくつかの構造体変数を設定し、ロッキング要求の型と開始を設定できます。
マッピングされたファイルを flock(3UCB) でロッキングできません。詳細は、mmap(2) を参照してください。しかし、(POSIX スタイルまたは Solaris スタイルでの) マルチスレッド指向同期メカニズムをマッピングされたファイルで使用できます。mutex(3THR)、condition(3THR)、semaphore(3THR)、および rwlock(3THR) を参照してください。