Partager via


_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

Voir aussi

Référence

Gestion de fichiers

_create, _wcreat

_open, _wopen