locking

提供: RAD Studio
移動先: 案内検索

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++

+