Konuşmacı: Şimdi diyelim dalış Dağıtım koduna
ve bağlam bakmak hangi kod yazmak
faaliyet olacak.
Günün sonunda, uygulamak için gidiyoruz
web sunucusu tamamı.
Ama biz sağladık iskelet ile size
Bazı özelliğe sahip kod, Özellikle ağ ile ilgili.
Bir göz atalım.
>> Yani buraya tepeye doğru Dosyanın bir demet
özelliği makro gereksinimlerini test edin.
Şimdi bu c, burada sadece bir özelliğidir man sayfaları bir demet göre
Eğer bazı tanımlamak zorunda Bu sabitler gerçek olamayacak kadar
ya da bu yüzden bile belirli sayılar olmak Eğer belirli fonksiyonlara erişebilirsiniz.
Aksi takdirde bildirilmeyen olacak ve erişimi olmayacaktır.
Yani arada yaptık adam sayfalarını okuma.
Şimdi aşağı aşağıda, içinde 17 ile satır 15, biz
ilan sınırlar bir sürü var.
>> Ve biz bu ödünç ettik Apache adı verilen popüler web sunucusu.
Ve bunlar sadece birkaçı gidiyor numaralar
toplam sayısını kap bayt olduğunu izin
HTTP isteği için çeşitli bağlamlarda bir tarayıcı beni göndermek için izin verilir.
Sonra, sekizli tanımlar.
Şimdi bir sekizli sadece bir fantezi yoludur Bir bayt, ya da sekiz biti söyleyerek.
Yesteryear bir bayt içinde çıkıyor ille sekiz bit oldu,
böylece sekizli her zaman sekiz bittir.
Yani bu durumda biz kabul ettik Ne ağ yaygın
Sekiz bayt, bir sekizli çağırarak dünya.
>> Burada sekizli olacak belirtildi ettik böylece çok adli tıp gibi, 512 olacak
biz bir demet okuduğumuzda Bir seferde bayt, burada da,
Biz okumak için gidiyoruz Bir seferde sekizli demet.
Başlık dosyaları bir sürü Sonraki.
Nasıl bu dahil biliyor muydunuz?
Peki ben sadece adam okumak işlevler bir dizi sayfalar
Bu dağıtım kullanmak edeceğiz kod ve olanlar dahil
Ben talimatı verildi.
>> Ve şimdi bir veri türüne sahip.
Biz bir karakter olmak için bir sekizli ilan ettik.
Ve biz bu olduğunu, daha sonra göreceksiniz kod boyunca kullanılır.
Ve biz ilan ettik prototiplerin sürü,
ve biz aracılığıyla hızla yürüyeceğiz Bu fonksiyonların her biri.
Son olarak ve belki de en tutmak önemlidir
Bu noktada en akla Hikaye olduğunu orada
aslında, bir bütün olarak Küresel değişkenlerin demet
dosyanın en üstünde, kök, CFD, SFD, istek, dosya ve vücut.
Global >> Şimdi, genel olarak kullanılarak çok değişkenler, ya da tüm global değişkenler,
Geri uygulama değildir.
Ama biz de bir kullanıyorsanız çıkıyor tekniği olarak adlandırılan sinyal işleme sonra
için bize izin verir kod içinde Kullanıcı bir şey çarptığında tespit
CTRL C ve kapatma gibi incelikle sunucu.
Ve sırayla incelikle yapmak ve aslında ücretsiz hafızasını,
biz erişimi olması gerekir Bu küresel değişkenler.
>> Ve şimdi ana bir göz, atalım ki Bu programın tamamını tahrik eder.
Öncelikle, burada üst biz Bir hata numarası değişkeni var
değil gibi görünmektedir bir tür var, ama bu
aslında çünkü adlı bir dosyada tanımlanan
Hata errno.h hangi daha yukarı dahildir.
Aslında errno adam yaparsanız Bu şey için tanımına bakın,
Eğer bu bir olduğunu göreceksiniz özel global değişken olduğu
bütün bir demet tarafından ayarlanır fonksiyonların yazılmamıştır
bizim tarafımızdan, ancak Linux yazarları tarafından ve diğer sistemler aslında ayarlamak için
bu değişken bir şey arasında bir sayı yanlış giderse sen küresel yapabilirsiniz böylece
yanlış yaptığını anlamaya.
>> Yeni göreceksiniz Şimdi aşağı aşağıda tekniği, belki, Getopt kullanarak
ayrıştırma komutu yardımcı bir işlev satırı argümanları biz değil ki
bulmaktan israf zaman rahatsız zorunda dışarı 8080'den gibi bir şey ayrıştırmak nasıl,
veya çizgi p, ya da çizgi h yardım almak için.
getopt aslında bizim için yapar.
Daha fazla bilgi için man sayfasına bakın.
>> Sonraki biz hata biraz yapmak emin olmak için kontrol
port numarası dahilinde olduğunu spec belirtilen aralık.
Sonra, işlevine bir çağrı görmek kimin tanımı, biz edeceğiz başlangıç
Bir an bakmak, ve onun adı olarak Bu web sunucusu başlar, göstermektedir.
Burada bir işlev çağrısı var der yukarıdaki sinyal,
eğer ve Denetim C duyduğunuzda kullanıcının klavye, go ahead ve çağrı
gidiyor bir işlevi çağrılır işleyici sonuçta temiz şeyleri ve durdurma
Sunucu.
>> Bunun altında bir gibi görünen bir sonsuz döngü, ilk satırı olan
etkin bir şekilde çağrı adlı bir işlev
kendimizi, hangi reset sırayla daha sonra uygulamak
Küresel devletlerin bazı boşaltmak için.
Bundan sonra bir çizgidir Kod bu şartlı
dönüşü denetliyor Bağlı değeri.
Bir yüklem gibi şimdi bağlı görünüyor, true veya false döndürür şey.
Ve öyle, ama var Bağlı olarak özel bir şey
ki bu bir engelleme çağrısı.
Orada oturup bekleyecek Bir kullanıcının tarayıcısına kadar
Bu web bağlanmaya çalıştığında Sunucu ve ancak o zaman olacak
biz ilerlerken, böylece doğru veya return false Bu takdirde ifadenin içine.
>> Bir kez orada, bir bu işlevi fark Biz yazdı ayrıştırma çağrılan işlev,
hangi tüm sekizli tüm ayrıştırır Bir tarayıcı gelen bayt
sunucuya, o yüzden verebilirsiniz birine geri sonuçta bir değer
Bu global değişkenler ki mağazalar sadece bayt tüm
Bunun başlıkları istek, değil vücut
o aslında bir beden olsaydı.
>> Şimdi başlar altında ayıklamak için bu başlıkları ayrıştırmak
bilgilerinin bir alt kümesi umrumuzda söyledi.
Spesifik olarak, her şartname, ilk
olan hattı talep istedim sadece ilk satırı bu
umarım olsun gibi bir şey diyor yırtmaç ya da bazı yol ve sonra HTTP 1.1.
Biz bu metaforu kullanıyorsanız Bir samanlıkta iğne
Özellikle bakmak için karakter veya adresleri.
Gerçekten de, bir dizi var dağıtım kodu işlevleri
Senin ki, çok yararlı bulabilirsiniz Belirli değerler ararken.
>> Sonuçta, biz bu bayt kopyalamak Bir değişken olarak adlandırılır hattı,
çok hangi, biz ettik, fark yığınında tahsis
Bir dinamik boyutlu dizi yoluyla.
Ve biz bilinçli çalışıyoruz malloc arayarak önlemek için
Yine, çünkü nedeniyle Kontrol C olmanın
Bu programın, bir potansiyel özelliği, biz aniden bu kodu vardır istemiyorum
Kullanıcı vurmak tarafından kesildi Kontrol C, sonucu
Ben bir şans olmayabilir olduğunu ücretsiz şey için ben malloced ettik.
Yani çok kullanmaya çalışıyorum yığının Ben burada can olduğunu.
>> Sonraki kadar, dos için bir sürü.
şartname yorumlamak olacak Burada beklenen tam olarak ne,
ama yorumlar size vermek Neyin bir ipucu öncesinde yatıyor.
Sen ilk ihtiyacı istek hattı doğrulamak
ve gibi görünüyor emin olun özellikler, tabiri caizse, dilbilgisi
olması gerektiği söyledi.
Daha sonra bir şey ayıklamak gerekir dışarı şeyler, sorgu denir
Bir soru işaretinden sonra, gibi bizim Google örnek gördüm
HD parametresinde geçerken.
Biz sonra birlikte bitiştirmek web sunucusu kök
öyle yolu ile Bu istek ilk satırı
ve tam yolunu oluşturur Dosya biz bakmak istiyorum.
>> Bundan sonra, biz emin olmak için gidiyoruz bu dosya var ve okunabilir.
Ve sonra ayıklamak için gidiyoruz onun Dosya uzantısı, .html veya .php,
ya da var gibi bazı uzatma Talep dize çok uç.
Sonraki kadar bir bütündür kod demet biz yazdı
Aslında PHP oluşturmak için Sizin için oluşturulan içerik.
Özetle, bu kod adı alır
Dosyanın PHP yorumlamak istiyorum.
Biz denilen şey bunu geçmek PHP'nin tercüman içine bir boru.
Sanki yanıtı geri alın Yanıt dosya kendisi idi.
Ve sonra o dosyanın üzerinde yineleme bir tampon içine hepsini çekerek bayt
sonuçta can böylece bunları yazdırabilirsiniz.
>> Gerçekten de, tüm bu dprintf için buraya çağırır
Bize bir şey yazdırmak için izin verir Bir dosya tanımlayıcı olarak adlandırılan bu
sadece bir tam sayıdır bir dosyayı temsil eder.
, Ruhu çok benzer ama Bir dosyadan temelde farklı
Yıldız işaretçi.
Eğer gibi sözdizimi kullanabilirsiniz nasıl dikkat printf burada dinamik olabilir ki
uzunluk gibi bir şey eklemek HTTP başlığının değeri
İçerik-Uzunluk denir.
Ve sonuçta ben kullanılan işlevi aslında yazmak için hakkı
istek vücut.
>> Ne yazık ki, sadece uygulanan dinamik destek
oluşturulan PHP dosyaları.
Biz destek uygulamak vermedi Statik gif gibi dosyaları ve JPEG,
ve CSS ve HTML dosyaları.
Yani, ne yazık ki, size bırakılır İstemci amaca cevap
Bunu yapmak için.
Orada Yani orada olduğunu göreceksiniz değil blok içinde çok ilham,
ama nasıl kadar biraz daha yüksek eğer biz PHP kodu yorumlama hakkında gitti
fonksiyonları kullanacağız Biraz farklı.
>> Aslında, ödünç alabilir işlevselliği bazı
belki de adli tıp Sorun seti, çünkü
Günün sonunda tüm yapmanız gerekenler Bildiğiniz kez burada yapmak olduğunu açık hangi dosya
Bildiğiniz bir kez ve o sözde var MIME türü veya içerik türü,
Eğer bu bayt okumak gerekir ve bir şekilde dışarı onları geri tükürmek.
>> Ve bu şimdi bir tur Dosyanın diğer işlevler.
İlk bağlandığında kadar, hangi sadece true döndürür
ne zaman nihayet bir duyar bir kullanıcıdan gelen bir bağlantı.
Sonraki kadar hatadır.
Hata, bu arada, bir işlev biz Farklı 400 işlemek için yazdı
ve 500 HTTP durum Eğer isteyebilirsiniz kodları
kullanıcıya geri göndermek için, Standart mesajla birlikte.
>> Sonraki kadar yükü özellikle, bir Amacı hayatında etli fonksiyonu,
Bir dosya yıldız okumak için bir işaretçisi küresel tampon içine bir dosyanın içeriğini
global beyan [Yukarıda? Ana. ?]
Bu çünkü biz biraz karmaşık dosyadan bayt okumak zorunda
ama her tekrarında kontrol biz zaten var olup olmadığını
dosyanın sonuna vurmak veya başka bir şey yanlış gitti.
Ve biz emin olmak için realloc kullanın ne olursa olsun biz kullandığınız tampon büyüyor
büyüyen ve her zaman büyüyen ve bayt sayısı öncesinde kalan
biz orada sığacak gerektiğini.
Handler, bu arada, bir gets fonksiyonu
sahip yoluyla denilen Bir sinyal olarak Kontrol C tescil
Biz durdurmak istiyorum.
Işleyicisi burada dikkat öyle sonuçta
aramalar, dur hangi tabii web sunucusu durur.
Ve ne yazık ki, arama uygulanmadı.
Ruhla, bu bir Oldukça basit bir işlev.
Bir dosya uzantısı göz önüne alındığında, bu ihtiyacı MIME sözde var dönmek için
türü veya içerik türü.
Ve biz şartnamede belirttiğiniz Bu haritalama ne olmalıdır.
Ama çevirmek gerekir sonuçta c koduna o.
>> Sonraki kadar bizim benzer etli işlevi hayatta kimin amacı, ayrıştırma denir
bir dosyadan okumak için, ancak bir ağ bağlantısından.
Özellikle, okuma ve ayrıştırma Bir tarayıcıdan geldi HTTP isteği
böylece sunucuya sonuçta biz ayrıştırmak
istek sadece başlıklarda çizgi ve sizin için bu dönüş
Küresel tampon yoluyla bu Biz [Yukarıda belirtilen? Ana. ?]
>> Sıfırlama, bu arada, bir olduğunu Biz define işlevi
Bu iteratif içinde çağrılan Ana her zaman size üzereyiz
dinlemeye başlamak için hazır Yeni bir bağlantı için
biz her zaman biliyoruz ki Bizim değişkenlerin durumu
ve böylece biz de ettik herhangi bir bellek serbest olduğu
için tahsis edilmiş olabilir Bir önceki ağ bağlantısı.
Sonraki kadar isimli başlatmak, Biz yazdı fonksiyonu
bir bütünü içeren ağ kodu sürü
sonuçta web sunucusu başlar.
>> Son güncelleme fonksiyonu denilen durdurma, hangi
tam olarak bunu yapıyor, bunu web sunucusu durur.
Ama önce herhangi bir belleği boşaltır hala tahsis edilmiştir.
Ama sonuçta çıkış çağırır Hatta kontrol dönmeden
Bizim ana işlevi.
Son olarak, bir En önemli teknikler
uygularken Bu web sunucusu deneme yanılma biraz olacak,
bir tarayıcı penceresini açık olan sağ ve bir terminal penceresi de
sol, sunucular konsolu Pencere, böylece
olan iletileri görebilirsiniz Ekranda görüntülenen.
>> Ama daha iyisi üçüncü olurdu Pencere, ikinci terminal penceresi,
hangi Telnet, kullanım kullanmak hangi spec reçete edilir.
Ve Telnet sadece çok olduğunu Basit ağ programı
Bu sizi taklit sağlar tek bir pencerede bir tarayıcı olabilir
Diğer pencereye konuşurken.
Gördüğünüz Bu yolu tam metin komutları
geri o geliyor sunucudan istemciye
sokma gerek kalmadan Chrome'un geliştirici etrafında
bir başka araçlar clunkier arayüz.