Freigeben über


_locking

Sperrt oder legt eine Datei Bytes frei.

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

Parameter

  • fd
    Dateideskriptor.

  • Modus
    Sperren Aktion auszuführen.

  • nbytes
    Anzahl von Bytes zu sperren.

Rückgabewert

_locking gibt 0 zurück, wenn der Vorgang erfolgreich war.Ein Rückgabewert von 1 gibt Fehler auf. In diesem Fall errno auf einen der folgenden Werte festgelegt wird.

  • EACCES
    Sperren verletzung (gesperrte Datei oder die bereits entsperrte).

  • EBADF
    Ungültiger Dateideskriptor.

  • EDEADLOCK
    Sperrenverletzung.Wird zurückgegeben, wenn das _LK_LOCK oder _LK_RLCK-Flag angegeben wird und die Datei kann nicht gesperrt werden. Beim Versuch nach 10

  • EINVAL
    Ein ungültiges Argument wurde an _lockingangegeben.

Wenn der Fehler aufgrund eines ungültigen Parameters, z. B. ein ungültiger Dateideskriptor, der ungültige Parameter Ereignishandler wird aufgerufen wird, wie in Parametervalidierungbeschrieben.

Hinweise

Die Funktion _locking Sperren oder legt nbytes Bytes der Datei frei, die von fdangegeben wird.Das Sperren von Bytes in einer Datei verhindert den Zugriff auf diese Bytes von anderen Prozessen.Alle Sperren oder das Entsperren beginnt dabei an der aktuellen Position des Dateizeigers und wird für die folgenden nbytes Bytes fortgesetzt wird.Es ist möglich, die Dateiende Bytevergangenheit zu sperren.

Modus muss eine der folgenden Manifesten Konstanten handeln, die in Locking.h definiert sind.

  • _LK_LOCK
    Sperrt die angegebenen Bytes.Wenn die Bytes nicht gesperrt werden können, versucht das Programm erneut sofort nach 1 Sekunde.Wenn Sie versuchen, die nach dem 10 Bytes nicht gesperrt werden können, gibt die Konstante einen Fehler zurück.

  • _LK_NBLCK
    Sperrt die angegebenen Bytes.Wenn die Bytes nicht gesperrt werden können, gibt die Konstante einen Fehler zurück.

  • _LK_NBRLCK
    Dieselbe Bedeutung wie _LK_NBLCK.

  • _LK_RLCK
    Dieselbe Bedeutung wie _LK_LOCK.

  • _LK_UNLCK
    Setzt die angegebenen Bytes frei, die zuvor gesperrt werden müssen.

Mehrere Bereiche einer Datei, die sich nicht überschneiden, können gesperrt werden.Ein Bereich, der entsperrt wird, muss zuvor gesperrt werden._locking führt keine angrenzenden Bereichen zusammen. gesperrte wenn zwei Bereiche sind angrenzend, muss jeder Bereich separat entsperrt werden.Bereiche sollten nur kurz gesperrt werden und dürfen entsperrt werden, bevor eine Datei geschlossen wird oder das Programm beendet.

Anforderungen

Routine

Erforderlicher Header

Optionaler Header

_locking

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

<errno.h>

Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.

Bibliotheken

Alle Versionen Cs.

Beispiel

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

Eingabe: crt_locking.txt

The first thirty bytes of this file will be locked.

Beispielausgabe

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

.NET Framework-Entsprechung

System::EA::FileStream::Sperre

Siehe auch

Referenz

Datei-Behandlung

_create, _wcreat

_open, _wopen