_locking

锁或打开文件的字节。

int _locking(
   int fd,
   int mode,
   long nbytes 
);

参数

  • fd
    文件描述符。

  • 模式
    插针执行。

  • 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 );
}

输入: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

.NET Framework 等效项

系统:: IO:: FileStream:: 锁定

请参见

参考

文件处理

_creat, _wcreat

_open, _wopen