locking
io.h:インデックス への移動
ヘッダーファイル
io.h, sys\locking.h
カテゴリ
入出力ルーチン
プロトタイプ
int locking(int handle, int cmd, long length);
説明
ファイル共有ロックを設定またはリセットします。
locking は,オペレーティングシステムのファイル共有メカニズムへのインターフェースを提供します。ロックまたはロック解除されるファイルは,handle で指定されたオープンファイルです。ロックまたはロック解除される領域は,現在のファイル位置から length バイトの長さまでです。
任意のファイルのいくつかの重ならない任意の領域に対してロックを設定できます。ロックされた領域に対して書き込みまたは読み取りを行うプログラムは,操作を 3 回再試行します。3 回の再試行がすべて失敗した場合,呼び出しはエラーになって失敗します。
cmd は,実行するアクションを指定します。これらの値は,sys\locking.h で定義されています。
LK_LOCK |
領域をロックします。ロックに成功しない場合は,1 秒に 1 回ずつ 10 秒間再試行してから中止します。 |
LK_RLCK |
LK_LOCK と同じです。 |
LK_NBLCK |
領域をロックします。ロックに成功しない場合は,ただちに中止します。 |
LK_NBRLCK |
LK_NBLCK と同じです。 |
LK_UNLCK |
領域のロックを解除します。領域は,以前にロックされている必要があります。 |
戻り値
成功した場合,locking は 0 を返します。そうでない場合は,-1 を返し,グローバル変数 errno に次のいずれかの値を設定します。
EACCES |
ファイルがすでにロックまたはロック解除されている |
EBADF |
不正なファイル番号 |
EDEADLOCK |
10 回再試行したがファイルをロックできない(cmd は LK_LOCK または LK_RLCK) |
EINVAL |
cmd が無効か,SHARE.EXE をロードできない |
例
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
#include <sys\locking.h>
int main(void)
{
int handle, status;
long length;
handle = sopen("c:\\autoexec.bat", O_RDONLY,SH_DENYNO);
if (handle < 0) {
printf("sopen failed\n");
exit(1);
}
length = filelength(handle);
status = locking(handle,LK_LOCK,length/2);
if (status == 0)
printf("lock succeeded\n");
else
perror("lock failed");
status = locking(handle,LK_UNLCK,length/2);
if (status == 0)
printf("unlock succeeded\n");
else
perror("unlock failed");
close(handle);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |