WEBVTT

00:00.110 --> 00:05.690
Dosyalarda genel bir bildirim zinciri altyapısı uygulayarak başlayacağız.

00:05.720 --> 00:10.280
TCP IP yığını eğik çizgi bildirimi ve kenar bildirimi.

00:10.280 --> 00:10.880
Doğru.

00:10.910 --> 00:15.510
Bu iki dosya genel bir bildirim zincirini temsil edecektir.

00:15.590 --> 00:21.380
Şimdi, tartıştığımız gibi, bu bildirim zinciri hiçbir şey değildir, ancak anahtarla birlikte işlev işaretçilerinin

00:21.380 --> 00:22.790
bağlantılı bir listesidir.

00:22.820 --> 00:23.600
Doğru.

00:23.870 --> 00:29.540
Şimdi size bir bildirim zincirini temsil eden bir veri yapısını nasıl yazacağınızı sorsam,

00:29.540 --> 00:30.770
ne yazarsınız?

00:31.340 --> 00:35.300
Basitçe bildirim zinciri bizim bağlantı listemizdir.

00:35.510 --> 00:39.620
Dolayısıyla bu veri yapısı basitçe bir bildirim zincirini temsil eder.

00:39.620 --> 00:43.880
Bu veri yapısında, bildirim zincirine bir isim verdik.

00:43.910 --> 00:48.140
Bu isteğe bağlıdır ve sadece kullanıcı bilgilendirme amaçlıdır.

00:48.170 --> 00:52.910
Bildirim zincirinin herhangi bir işlevselliğine gerçekten katkıda bulunmaz.

00:53.030 --> 00:57.620
Ve ikinci üye aslında bağlantı listesinin başı, değil mi?

00:57.620 --> 01:02.250
Dediğim gibi, bildirim zinciri geri aramaların bağlantılı bir listesidir.

01:02.460 --> 01:05.280
Şimdi bunu diyagramda görebilirsiniz.

01:05.280 --> 01:12.420
Burada sağ tarafta, içinde üç unsur bulunan bir bildirim zinciriniz var, değil

01:12.420 --> 01:13.140
mi?

01:13.140 --> 01:16.500
Fonksiyon işaretçisi ile birlikte bazı tuşlar, Sağ.

01:18.150 --> 01:27.240
Şimdi, bu bildirim zincirindeki bir düğüme veya bir öğeye bildirim zinciri öğesi denir, değil mi?

01:27.390 --> 01:30.600
Yani tüm bağlantı listesine bildirim zinciri denir.

01:30.600 --> 01:36.780
Ancak bu bildirim zincirindeki belirli bir düğüme bildirim zinciri öğesi denir.

01:37.720 --> 01:44.200
Şimdi size sorsam, bildirim zinciri elemanını temsil eden bir veri yapısını nasıl yazardınız?

01:44.230 --> 01:51.690
Cevap, bir anahtar ve bir fonksiyon işaretçisi belirtmek için bir hüküm olması gerektiği kadar basit olmalıdır.

01:51.700 --> 01:52.480
Doğru.

01:53.140 --> 01:57.580
Burada bir bildirim zinciri elemanımız, veri yapımız olduğunu görebilirsiniz.

01:57.610 --> 02:01.420
Anahtarı saklamak için bir bellek aldığımızı varsayalım.

02:01.450 --> 02:03.370
Bu makroyu tanımlayabilirsiniz, Max.

02:03.370 --> 02:08.790
Anahtar boyutunu 64 bayt veya 128 bayt gibi bir değer olarak bildirin.

02:08.800 --> 02:11.950
Bu, anahtarı saklamak için fazlasıyla yeterli, değil mi?

02:11.950 --> 02:17.470
Dolayısıyla bu makro, bildirim zinciri öğesinde saklayabileceğimiz maksimum anahtar boyutunu temsil eder.

02:17.560 --> 02:24.520
Anahtar boyutu olan ikinci üye, depolanan anahtarın gerçek boyutunu temsil eder, doğru.

02:24.760 --> 02:30.940
Şimdi üçüncü üye, abonenin bir anahtar belirtip belirtmediğini temsil eder.

02:30.970 --> 02:39.100
Bir abonenin joker abone olabileceğini, yani hiç anahtar belirtmeyebileceğini unutmayın.

02:39.110 --> 02:43.610
Bu durumda, bu boolean bayrağı abone tarafından false olarak ayarlanmalıdır.

02:43.610 --> 02:44.330
Doğru.

02:44.480 --> 02:50.630
Ve bu bildirim zinciri öğesindeki son üye, abonenin yayıncı tarafından olay hakkında

02:50.660 --> 02:56.360
bilgilendirilmek istediği bir işlevi temsil eden bir işlev işaretçisidir.

02:56.360 --> 02:57.010
Doğru.

02:57.020 --> 03:04.070
Yani bu, aboneye ait olan fonksiyonun işaretçisini saklayan bir fonksiyon işaretçisidir,

03:04.070 --> 03:04.820
değil mi?

03:04.940 --> 03:09.020
Şimdi bu fonksiyonun prototipinin ne olması gerektiği sorusu ortaya çıkıyor?

03:09.050 --> 03:15.440
Elbette, bu işlevin prototipi genel bir şey olmalıdır çünkü bir geri arama görevi görmelidir.

03:15.770 --> 03:20.330
Yani, her tür veri için, her tür abone için çalışmalıdır.

03:20.330 --> 03:20.930
Değil mi?

03:20.930 --> 03:23.750
Dolayısıyla bu geri arama fonksiyonu aşağıdaki prototipe sahip olmalıdır.

03:23.750 --> 03:27.290
Yani, voidstart türünde bir argüman kabul etmelidir.

03:27.290 --> 03:33.290
İkinci bağımsız değişken ise ilk bağımsız değişken olarak aktarılan bayt cinsinden boyutu temsil eder.

03:33.290 --> 03:33.920
Doğru.

03:34.980 --> 03:41.340
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

03:41.340 --> 03:43.200
ayarlanacaktır, değil mi?

03:44.080 --> 03:49.870
Unutmayın, tüm bu kodların TCP IP yığını eğik çizgisi iftach'a bildirilmesi gerekir.

03:49.870 --> 03:50.590
Doğru.

03:50.740 --> 03:55.990
Şimdi klavyeye basma zamanı ve zaten dosyanın içinde olduğumu görebilirsiniz.

03:55.990 --> 03:59.830
Iftach ve benim bu sabit değeri tanımladığımızı unutmayın.

03:59.830 --> 04:02.400
Maksimum anahtar boyutunu 64 olarak bildirin.

04:02.410 --> 04:07.090
Şimdi, bu dosyada tartıştığımız tüm veri yapılarını tanımlamanız gerekir.

04:07.120 --> 04:11.200
İlk olarak, bildirim zinciri öğesini tanımlamanız gerekir.

04:11.320 --> 04:12.130
Doğru.

04:12.130 --> 04:15.490
Ve bundan sonra, bildirim zincirinin kendisi.

04:15.520 --> 04:16.750
Bu kadar.

04:16.750 --> 04:17.620
Değil mi?

04:17.620 --> 04:23.200
Dolayısıyla bu iki veri yapısı birlikte, yayıncı tarafından sürdürülecek olan bildirim zincirimizi

04:23.200 --> 04:24.190
temsil eder.

04:24.190 --> 04:31.900
Şimdi, bildirim zinciri üzerinde işlem yapabilmek için hangi fonksiyonları yazmamız gerektiğini görelim.
