_locking

Bloqueia ou desbloqueia os bytes de um arquivo.

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

Parâmetros

  • fd
    Descritor de arquivo.

  • mode
    Ação para executar o bloqueio.

  • nbytes
    Número de bytes para bloquear.

Valor de retorno

_locking Retorna 0 se obtiver êxito. Um valor retornado de – 1 indica falha, no qual caso errno é definida como um dos seguintes valores.

  • EACCES
    Violação de bloqueio (o arquivo já bloqueado ou un bloqueado).

  • EBADF
    Descritor de arquivo inválido.

  • EDEADLOCK
    Violação de bloqueio.Retornado quando o _LK_LOCK ou _LK_RLCK sinalizar 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 for devido a um parâmetro incorreto, tal sistema autônomo um descritor de arquivo inválido, o manipulador de parâmetro inválido é invocado, sistema autônomo descrito em Validação de parâmetro.

Comentários

The _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.Todo bloqueio ou desbloqueio começa na posição corrente do ponteiro de arquivo e continua para a próxima nbytes bytes.É possível bloquear bytes além do participante 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 bloqueado, o programa imediatamente tente novamente depois de 1 segundo.Se, após 10 tentativas, os bytes não podem ser bloqueado, a constante retornará um erro.

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

  • _LK_NBRLCK
    Igual a _LK_NBLCK.

  • _LK_RLCK
    Igual a _LK_LOCK.

  • _LK_UNLCK
    Desbloqueia os bytes especificados, devem ter sido anteriormente bloqueado.

Várias regiões de um arquivo não se sobrepõem podem ser bloqueado.Uma região que está sendo un bloqueado deve ter sido anteriormente bloqueado._locking não mescla regiões adjacentes; se dois bloqueado regiões são adjacentes, cada região deve ser un bloqueado separadamente. Regiões devem ser bloqueados 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 do C em time de execução bibliotecas.

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

Equivalente do NET Framework

sistema::IO::FileStream::bloquear

Consulte também

Referência

Manipulação de arquivos

_creat, _wcreat

_Open, _wopen