CodeBlanks Logo Icon CodeBlanks

Özet - Dosya kilitleme

  • C kursu
  • İleri seviye
  • Ders 42/83
  • 5 dk

flock ve fcntl'i birleştirerek bir kilit yöneticisi yazarsın.

Dosya kilitleme özeti

Dosya kilitlemenin iki aracını öğrendin: flock basit ve tüm dosyaya, fcntl bayt aralığına ve POSIX standart. İkisi de önermelidir; işbirliği yapan süreçler kilitleri sayar.

Kilit türleri: paylaşımlı (okuma) ve ayrıcalıklı (yazma). Deadlock, döngüsel beklemeyle oluşur; kilit sıralamasıyla önlenir. Otomatik temizlik close ve atexit ile sağlanır. Bu özette flock ve fcntl'i birleştirip bir kilit yöneticisi yazacağız.

Uygulama Kilit yöneticisi yaz

int fd = open("/tmp/cb_mgr.txt", O_CREAT | O_RDWR, 0644); ile dosya aç. flock(fd, LOCK_EX); ile flock kilidi al. struct flock fl; tanımla; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; ve fcntl(fd, F_SETLK, &fl);. printf("kilit yöneticisi\n");. flock(fd, LOCK_UN);, fl.l_type = F_UNLCK;, fcntl(fd, F_SETLK, &fl);. close(fd); ve unlink("/tmp/cb_mgr.txt");.

Başlangıç kodu

main.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/file.h>

// dosyayı aç ve kilit al
// kilit yapısı ile ikinci kilidi kur
// yazdır, kilidi bırak, kapat ve sil

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/file.h>

int main(void) {
    int fd = open("/tmp/cb_mgr.txt", O_CREAT | O_RDWR, 0644);
    flock(fd, LOCK_EX);
    struct flock fl;
    fl.l_type = F_WRLCK;
    fl.l_whence = SEEK_SET;
    fl.l_start = 0;
    fl.l_len = 0;
    fcntl(fd, F_SETLK, &fl);
    printf("kilit yöneticisi\n");
    flock(fd, LOCK_UN);
    fl.l_type = F_UNLCK;
    fcntl(fd, F_SETLK, &fl);
    close(fd);
    unlink("/tmp/cb_mgr.txt");
    return 0;
}

Beklenen çıktı

kilit yöneticisi

Sonraki adımlar

Dosya kilitlemeyi tamamladın. Bu temeller veritabanı motorlarının, yapılandırma dosyalarının ve log döndürmenin çekirdeğidir. flock basit senaryolar için, fcntl ince aralık denetimi için kullanılır.

Sonraki konular: terminal I/O ile etkileşimli uygulamalar, dinamik yükleme ile eklenti sistemleri ve kriptografi ile güvenlik. Bunların hepsi sağlam kilit yönetimiyle birleşir.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi durumda fcntl, flock'tan tercih edilir?

  • Tüm dosya kilidi gerekirse
  • Bayt aralığı kilidi gerekirse Doğru cevap
  • Yalnızca paylaşımlı kilit gerekirse
  • Hiç kilit gerekmezse

Açıklama: fcntl bayt aralığı kilidi verir; flock tüm dosyayı kilitler.

2 Kilitleme kavramlarını eşle

Kavram Anlamı
flock Tüm dosya
fcntl Bayt aralığı
LOCK_EX Ayrıcalıklı
atexit Çıkış temizliği

İleri seviye bölümündeki tüm dersler