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.