Ö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
#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
#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 |