_locking
锁定或解锁文件的字节。
int _locking(
int fd,
int mode,
long nbytes
);
参数
fd
文件说明符mode
锁定要执行的操作。nbytes
用于锁定的字节数。
返回值
如果成功,_locking返回 0 。 为-1的返回值指示一个错误,在errno设置为以下任一值情况下。
EACCES
锁定冲突 (文件锁定或解除锁定)。EBADF
文件无效描述符。EDEADLOCK
锁定冲突。 当 _LK_LOCK 或 _LK_RLCK 标志指定时和文件不可能被锁定,然后尝试10次之后返回。EINVAL
无效参数指定 _locking。
如果失败由于参数错误,例如一个文件无效描述符,无效参数处理程序,如 参数验证所述。
备注
_locking 函数被锁定或解锁 fd指定文件的 nbytes 字节。 锁在文件的字节。其他进程可以防止对这些字节的访问权限。 所有锁定或解锁的起始文件指针的当前位置 nbytes 字节并为下运行。 锁定文件尾字节的过去是可能的。
清单常数模式 必须为下列之一,在 Locking.h 定义。
_LK_LOCK
锁定指定字节。 如果字节无法锁定,函数在 1 秒后直接调用。 如果10 多次尝试后字节无法锁定后,常数返回 FALSE。_LK_NBLCK
锁定指定字节。 如果字节无法锁定,常数将返回 false。_LK_NBRLCK
与 _LK_NBLCK 相同。_LK_RLCK
与 _LK_LOCK 相同。_LK_UNLCK
取消锁定指定字节,以前必须锁定。
重叠文件的多区域可以锁定。 绑定以前锁定解锁的区域。 _locking 不合并相邻区域;如果两种锁定的区域是连续的,必须单独取消锁定每个区域。 只应简要锁区域应在关闭文件或程序退出之前被取消锁定。
要求
例程 |
必需的标头 |
可选标头 |
---|---|---|
_locking |
<io.h 和> sys </locking.h> |
<errno.h> |
有关更多兼容性信息,请参见“简介”中的兼容性。
库
C 运行时库的所有版本。
示例
// crt_locking.c
/* This program opens a file with sharing. It locks
* some bytes before reading them, then unlocks them. Note that the
* program works correctly only if the file exists.
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/locking.h>
#include <share.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main( void )
{
int fh, numread;
char buffer[40];
/* Quit if can't open file or system doesn't
* support sharing.
*/
errno_t err = _sopen_s( &fh, "crt_locking.txt", _O_RDONLY, _SH_DENYNO,
_S_IREAD | _S_IWRITE );
printf( "%d %d\n", err, fh );
if( err != 0 )
exit( 1 );
/* Lock some bytes and read them. Then unlock. */
if( _locking( fh, LK_NBLCK, 30L ) != -1 )
{
long lseek_ret;
printf( "No one can change these bytes while I'm reading them\n" );
numread = _read( fh, buffer, 30 );
buffer[30] = '\0';
printf( "%d bytes read: %.30s\n", numread, buffer );
lseek_ret = _lseek( fh, 0L, SEEK_SET );
_locking( fh, LK_UNLCK, 30L );
printf( "Now I'm done. Do what you will with them\n" );
}
else
perror( "Locking failed\n" );
_close( fh );
}
Input: crt_locking.txt
The first thirty bytes of this file will be locked.
示例输出
No one can change these bytes while I'm reading them
30 bytes read: The first thirty bytes of this
Now I'm done. Do what you will with them