_locking
Kilitler veya bir dosyanın bayt kilidini açar.
int _locking(
int fd,
int mode,
long nbytes
);
Parametreler
fd
Dosya tanımlayıcısı.mod
Yapılacak işlem kilitleme.nbytes
Kilitlemek için bayt sayısı.
Dönüş Değeri
_lockingbaşarılı olursa 0 değerini döndürür.–1 Dönüş değeri hata, durumda olduğunu gösteren errno aşağıdaki değerlerden birini ayarlanır.
EACCES
Kilitleme ihlali (zaten kilitli veya kilidi dosyası).EBADF
Geçersiz dosya tanımlayıcısı.EDEADLOCK
Kilitleme ihlali.Ne zaman iade _LK_LOCK veya _LK_RLCK bayrağı belirtilmişse ve 10 denemeden sonra Dosya kilitlenemiyor.EINVAL
Geçersiz bir bağımsız değişken için verilen _locking.
Gibi bir geçersiz dosya tanımlayıcısı hatalı parametre yüzünden başarısız olması durumunda geçersiz parametre işleyicisi, açıklandığı şekilde çağrılır Parametre doğrulama.
Notlar
_locking İşlevi kilitler veya kilidini açar nbytes tarafından belirtilen dosyanın bayt fd.Bayt cinsinden bir dosya kilitleme erişim, diğer işlemler tarafından bu bayta engeller.Tüm kilitlenmesi veya kilidinin kaldırılması dosya işaretçisi geçerli konumda başlar ve sonraki devam eder nbytes bayt.Kilit baytlarını olası dosya sonu tamamlamıştır.
Mod Locking.h içinde tanımlanan aşağıdaki bildirim sabitlerinden biri olmalıdır.
_LK_LOCK
Belirtilen bayt sayısını kilitler.Bayt kilitli, programı yeniden 1 saniye sonra hemen çalışır.10 Denemeden sonra bayt kilitlenemez, sabit bir hata döndürür._LK_NBLCK
Belirtilen bayt sayısını kilitler.Bayt kilitli, sabit bir hata döndürür._LK_NBRLCK
_LK_NBLCK ürünüyle aynı._LK_RLCK
_LK_LOCK ürünüyle aynı._LK_UNLCK
Önceden kilitlenen gerekir belirtilen bayt sayısını kilidini açar.
Örtüşmeyen birden çok bölgeye bir dosyanın kilitli.Kilidi bir bölge önceden kilitlenmesi gerekir._lockingbitişik bölgeler birleştirmez; bitişik iki Kilitli bölgeler, her bölge ayrı ayrı kilidinin açılması gerekir.Bölge yalnızca kısa bir süre kilitli ve bir dosyayı kapatmak veya programdan çıkmadan önce kilidi.
Gereksinimler
Yordamı |
Gerekli başlık |
İsteğe bağlı bir üstbilgi |
---|---|---|
_locking |
<io.h> ve <sys/locking.h> |
<errno.h> |
Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.
Kitaplıkları
Tüm sürümleri c çalışma zamanı kitaplıkları.
Örnek
// 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 );
}
Giriş: crt_locking.txt
The first thirty bytes of this file will be locked.
Örnek Çıktı
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