_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 10EINVAL
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