Dosyalarda genel bir bildirim zinciri altyapısı uygulayarak başlayacağız.
TCP IP yığını eğik çizgi bildirimi ve kenar bildirimi.
Doğru.
Bu iki dosya genel bir bildirim zincirini temsil edecektir.
Şimdi, tartıştığımız gibi, bu bildirim zinciri hiçbir şey değildir, ancak anahtarla birlikte işlev işaretçilerinin
bağlantılı bir listesidir.
Doğru.
Şimdi size bir bildirim zincirini temsil eden bir veri yapısını nasıl yazacağınızı sorsam,
ne yazarsınız?
Basitçe bildirim zinciri bizim bağlantı listemizdir.
Dolayısıyla bu veri yapısı basitçe bir bildirim zincirini temsil eder.
Bu veri yapısında, bildirim zincirine bir isim verdik.
Bu isteğe bağlıdır ve sadece kullanıcı bilgilendirme amaçlıdır.
Bildirim zincirinin herhangi bir işlevselliğine gerçekten katkıda bulunmaz.
Ve ikinci üye aslında bağlantı listesinin başı, değil mi?
Dediğim gibi, bildirim zinciri geri aramaların bağlantılı bir listesidir.
Şimdi bunu diyagramda görebilirsiniz.
Burada sağ tarafta, içinde üç unsur bulunan bir bildirim zinciriniz var, değil
mi?
Fonksiyon işaretçisi ile birlikte bazı tuşlar, Sağ.
Şimdi, bu bildirim zincirindeki bir düğüme veya bir öğeye bildirim zinciri öğesi denir, değil mi?
Yani tüm bağlantı listesine bildirim zinciri denir.
Ancak bu bildirim zincirindeki belirli bir düğüme bildirim zinciri öğesi denir.
Şimdi size sorsam, bildirim zinciri elemanını temsil eden bir veri yapısını nasıl yazardınız?
Cevap, bir anahtar ve bir fonksiyon işaretçisi belirtmek için bir hüküm olması gerektiği kadar basit olmalıdır.
Doğru.
Burada bir bildirim zinciri elemanımız, veri yapımız olduğunu görebilirsiniz.
Anahtarı saklamak için bir bellek aldığımızı varsayalım.
Bu makroyu tanımlayabilirsiniz, Max.
Anahtar boyutunu 64 bayt veya 128 bayt gibi bir değer olarak bildirin.
Bu, anahtarı saklamak için fazlasıyla yeterli, değil mi?
Dolayısıyla bu makro, bildirim zinciri öğesinde saklayabileceğimiz maksimum anahtar boyutunu temsil eder.
Anahtar boyutu olan ikinci üye, depolanan anahtarın gerçek boyutunu temsil eder, doğru.
Şimdi üçüncü üye, abonenin bir anahtar belirtip belirtmediğini temsil eder.
Bir abonenin joker abone olabileceğini, yani hiç anahtar belirtmeyebileceğini unutmayın.
Bu durumda, bu boolean bayrağı abone tarafından false olarak ayarlanmalıdır.
Doğru.
Ve bu bildirim zinciri öğesindeki son üye, abonenin yayıncı tarafından olay hakkında
bilgilendirilmek istediği bir işlevi temsil eden bir işlev işaretçisidir.
Doğru.
Yani bu, aboneye ait olan fonksiyonun işaretçisini saklayan bir fonksiyon işaretçisidir,
değil mi?
Şimdi bu fonksiyonun prototipinin ne olması gerektiği sorusu ortaya çıkıyor?
Elbette, bu işlevin prototipi genel bir şey olmalıdır çünkü bir geri arama görevi görmelidir.
Yani, her tür veri için, her tür abone için çalışmalıdır.
Değil mi?
Dolayısıyla bu geri arama fonksiyonu aşağıdaki prototipe sahip olmalıdır.
Yani, voidstart türünde bir argüman kabul etmelidir.
İkinci bağımsız değişken ise ilk bağımsız değişken olarak aktarılan bayt cinsinden boyutu temsil eder.
Doğru.
Yani ilk bağımsız değişken 100 bayt uzunluğunda bir bellek yığınıysa, ikinci bağımsız değişken 100 olarak
ayarlanacaktır, değil mi?
Unutmayın, tüm bu kodların TCP IP yığını eğik çizgisi iftach'a bildirilmesi gerekir.
Doğru.
Şimdi klavyeye basma zamanı ve zaten dosyanın içinde olduğumu görebilirsiniz.
Iftach ve benim bu sabit değeri tanımladığımızı unutmayın.
Maksimum anahtar boyutunu 64 olarak bildirin.
Şimdi, bu dosyada tartıştığımız tüm veri yapılarını tanımlamanız gerekir.
İlk olarak, bildirim zinciri öğesini tanımlamanız gerekir.
Doğru.
Ve bundan sonra, bildirim zincirinin kendisi.
Bu kadar.
Değil mi?
Dolayısıyla bu iki veri yapısı birlikte, yayıncı tarafından sürdürülecek olan bildirim zincirimizi
temsil eder.
Şimdi, bildirim zinciri üzerinde işlem yapabilmek için hangi fonksiyonları yazmamız gerektiğini görelim.