_locking
Les verrous ou déverrouillage des octets d'un fichier.
int _locking(
int fd,
int mode,
long nbytes
);
Paramètres
fd
descripteur de fichier.mode
action verrouillante d'effectuer.nbytes
Nombre d'octets à verrouiller.
Valeur de retour
_locking retourne 0 si l'opération a réussi.Une valeur de retour - 1 indique un échec, dans ce cas errno a une des valeurs suivantes.
EACCES
Violation verrouillante (fichier est verrouillé ou déverrouillé).EBADF
descripteur de fichier valide.EDEADLOCK
violation verrouillante.Retourné lorsque la balise d' _LK_LOCK ou d' _LK_RLCK est spécifiée et le fichier ne peut pas être verrouillé après 10 tente.EINVAL
Un argument non valide a été spécifié à _locking.
Si l'échec est liée à un mauvais paramètre, tel qu'un descripteur de fichier valide, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.
Notes
La fonction d' _locking verrouille ou déverrouillage des octets de nbytes du fichier spécifié par fd.Les octets verrouillants dans un fichier empêché l'accès à ces octets par d'autres processus.Tout le verrouillage ou déverrouiller commence à la position actuelle du pointeur de fichier et continue pour les octets suivants de nbytes .il est possible de verrouiller le passé d'octets de fin de fichier.
le mode doit être l'une des constantes manifestes suivantes, qui sont définies dans Locking.h.
_LK_LOCK
verrouille les octets spécifiés.Si les octets ne peuvent pas être verrouillés, le programme essaie immédiatement à nouveau à 1 seconde.Si, une fois que 10 tente, les octets ne puissent pas être verrouillées, la constante retourne une erreur._LK_NBLCK
verrouille les octets spécifiés.Si les octets ne peuvent pas être verrouillés, la constante retourne une erreur._LK_NBRLCK
Identique à _LK_NBLCK._LK_RLCK
Identique à _LK_LOCK._LK_UNLCK
déverrouille les octets spécifiés, qui doivent avoir été précédemment verrouillés.
Plusieurs régions d'un fichier qui ne se chevauchent pas peuvent être verrouillées.Une région est déverrouillée doit avoir été précédemment verrouillée._locking ne fusionne pas les régions limitrophes ; si deux régions verrouillées sont limitrophes, chaque zone doit être déverrouillée séparément.Les zones doivent être verrouillées uniquement brièvement et doivent être déverrouillées avant de fermer un fichier ou s'arrêter le programme.
Configuration requise
routine |
en-tête requis |
en-tête facultatif |
---|---|---|
_locking |
<io.h> et <sys/locking.h> |
<errno.h> |
Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.
bibliothèques
toutes les versions de Bibliothèques runtime C.
Exemple
// 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 );
}
entrée : crt_locking.txt
The first thirty bytes of this file will be locked.
Résultat de l'exemple
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
Équivalent .NET Framework
System : : E/S : : FileStream : : Verrouillage