_locking
Bloqueia ou desbloqueia os bytes de um arquivo.
int _locking(
int fd,
int mode,
long nbytes
);
fd
Descritor de arquivo.mode
Ação para executar o bloqueio.nbytes
Número de bytes para bloquear.
_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.
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.
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.
Todas as versões do C em time de execução bibliotecas.
// 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 );
}
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