Compartilhar via


_locking

Bloqueia ou desbloqueia os bytes de um arquivo.

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

Parâmetros

  • fd
    Descritor de arquivo.

  • modo
    Bloqueando a ação a ser executada.

  • nbytes
    Número de bytes para bloquear.

Valor de retorno

_lockingRetorna 0 se obtiver êxito.Um valor de retorno de – 1 indica uma falha, caso em que errno é definida para um dos seguintes valores.

  • EACCES
    (Arquivo já bloqueada ou desbloqueada) da violação de bloqueio.

  • EBADF
    Descritor de arquivo inválido.

  • EDEADLOCK
    Violação de bloqueio.Retornado quando o _LK_LOCK ou _LK_RLCK sinalizador for especificado e o arquivo não pode ser bloqueado depois de 10 tentativas.

  • EINVAL
    Um argumento inválido foi fornecido a _locking.

Se a falha ocorre devido a um parâmetro incorreto, como, por exemplo, um descritor de arquivo inválido, o manipulador de parâmetro inválido é invocado, conforme descrito em Validação de parâmetro.

Comentários

O _locking função bloqueia ou desbloqueia nbytes bytes do arquivo especificado por fd.Bytes em um arquivo de bloqueio impede o acesso a esses bytes por outros processos.Todos os de bloqueio ou desbloqueio começa na posição atual do ponteiro do arquivo e passa para o próximo nbytes bytes.É possível bloquear bytes além do fim do arquivo.

modo deve ser uma das constantes a seguir manifesto, que são definidas no Locking.h.

  • _LK_LOCK
    Bloqueia os bytes especificados.Se os bytes não podem ser bloqueados, o programa imediatamente tenta novamente após 1 segundo.Se, após 10 tentativas, os bytes não podem ser bloqueados, a constante retornará um erro.

  • _LK_NBLCK
    Bloqueia os bytes especificados.Se os bytes não podem ser bloqueados, a constante retornará um erro.

  • _LK_NBRLCK
    Same as _LK_NBLCK.

  • _LK_RLCK
    Same as _LK_LOCK.

  • _LK_UNLCK
    Desbloqueia os bytes especificados, o que devem ter sido bloqueados anteriormente.

Várias regiões de um arquivo que não se sobreponham podem ser bloqueados.Uma região que está sendo desbloqueada deve ter foi bloqueada anteriormente._lockingnão mescla regiões adjacentes; Se duas regiões bloqueadas são adjacentes, cada região deve ser desbloqueado separadamente.Regiões devem ser trancadas resumidamente e devem ser desbloqueados antes de fechar um arquivo ou sair do programa.

Requisitos

Rotina

Cabeçalho necessário

Cabeçalho opcional

_locking

<io.h> e <sys/locking.h>

<errno.h>

Para obter mais informações de compatibilidade, consulte compatibilidade na introdução.

Bibliotecas

Todas as versões da bibliotecas de tempo de execução c.

Exemplo

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

Entrada: crt_locking.txt

The first thirty bytes of this file will be locked.

Saída de exemplo

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

Equivalência do .NET Framework

System::IO::FileStream::Lock

Consulte também

Referência

Manipulação de arquivos

_creat, _wcreat

Open, _wopen