Govornik: Sada ćemo roniti u distribucijskoj koda
i pogledajte kontekstu u kojoj broj pišete
će biti operativni.
Na kraju krajeva, ti ćeš provoditi
ukupnost web poslužitelja.
No, mi smo pod uvjetom što s kosturom
Kod koji imaju neku funkciju, Posebno se odnosi na umrežavanje.
Idemo pogledati.
>> Dakle, ovdje se prema vrhu datoteke je hrpa
značajku testirati makro uvjete.
A ovo je samo obilježje C, pri čemu se prema hrpa man stranice
morate definirati neke od ove konstante da bi bilo istinito
ili da se čak i posebni brojevi tako da imate pristup pojedinim funkcijama.
Inače oni će biti na crno i nećete imati pristup.
Tako sam to učinio na način čitanja man stranice.
Sada dolje, u Linije 15 do 17, što
ima hrpu granica deklariranih.
>> A mi smo posudili od njih popularni web poslužitelj zove Apache.
A to su samo brojevi koji idu
kapu ukupan broj bajtova koje se smiju
u različitim kontekstima za HTTP zahtjev da preglednik je dopušteno me poslali.
Zatim, možemo definirati okteta.
Sada oktet je samo fancy način kaže jedan bajt ili osam bitova.
Ispostavilo se da je u prošlost bajt nije nužno osam bitova,
pa oktet uvijek osam bitova.
Dakle, u ovom slučaju smo usvojili ono što je zajedničko u umrežavanje
Svijet poziva osam bajtova okteta.
>> Ovdje sam precizirao da će okteta biti 512, tako da je slično kao u forenzici
kad smo čitali hrpu bajtova u isto vrijeme, ovdje,
ćemo čitati hrpa okteta na vrijeme.
Sljedeća cijela hrpa zaglavlje datoteke.
Kako sam znao da su to?
Pa sam jednostavno pročitati muškarca Stranice za niz funkcija
da ćemo iskoristiti u ovoj distribuciji broj i uvrstiti u one
Bio sam upućen na.
>> I sada imamo vrstu podataka.
Mi smo proglasili oktet se char.
A mi ćemo kasnije vidjeti da je to koristiti tijekom koda.
I mi smo proglasili Cijela hrpa prototipa,
a mi ćemo se brzo šetati svaki od tih funkcija.
Na kraju, a možda i većina važno je imati na
um u ovom trenutku Priča je da postoji
su, zapravo cijela gomila globalnih varijabli
na vrhu datoteke, korijen, CFD, SFD, zahtjev, datoteke i tijelo.
>> Sada uglavnom, koriste toliko Global varijable, ili globalne varijable na sve,
nije vratio praksi.
Ali ispada da također koristimo Tehnika se zove rukovanje signala kasnije
u kodu, koji nam omogućuje da se otkriti kada korisnik pogodi nešto
kao što su CTRL C i zatvoriti poslužitelja graciozno.
A kako bi se to graciozno i zapravo osloboditi memoriju,
moramo imati pristup ove globalne varijable.
>> A sada ćemo pogledati glavni, koji vozi cjelinu ovog programa.
Prvo, na vrhu Ovdje smo imati pogreške promjenjivim brojem
koji se pojavljuje ne imaju tip, ali to je
jer to je zapravo definirani u datoteci pod nazivom
Pogreška errno.h koji uključena viši.
Ako to ne učinite čovjek errno zapravo vidi definiciju za ovu stvar,
vidjet ćete da je to posebna globalna varijabla koja
postavljena od strane cijela hrpa funkcija nije zapisano
kod nas, ali autori Linux i drugih sustava zapravo postaviti
Broj za tu varijablu kad nešto krene po zlu, tako da možete na globalnoj razini
shvatiti što je učinio pogriješiti.
>> Sada dolje vidjet ćete novi Tehnika možda pomoću getopt,
funkcija koja pomaže raščlanjivanju naredbu retka argumente tako da mi ne
morati gnjaviti gubit vrijeme figuring kako analizirati nešto kao 8080,
ili crtica p, ili crtica h za pomoć.
getopt suštini to radi za nas.
Pogledajte stranicu čovjeka više.
>> Zatim, možemo napraviti malo pogreške provjeravam da
da je broj luka je u roku navedenog područja u spec.
Zatim, možemo vidjeti poziv na funkciji početak, čija definicija ćemo
pogledati u jednom trenutku, a što je svoje ime sugerira, to pokreće web poslužitelj.
Ovdje imamo poziv na funkciji zove signal koji kaže,
Ako i kada čujete Upravljačka C iz korisnikov tipkovnica, ići naprijed i pozvati
funkcija zove vodič koji će na kraju čiste stvari i zaustaviti
poslužitelja.
>> Ispod toga je ono što se čini beskonačna petlja, od kojih prva linija
učinkovito je poziv na funkciju pod nazivom
reset, koji sami smo provoditi naknadno kako
kako bi oslobodili neke od naših globalnih država.
Nakon toga je linija kod koje uvjetno
provjerava povratak Vrijednost povezani.
Sada spojeni izgleda kao predikata, nešto što vraća true ili false.
I to ne, ali postoji nešto posebno u povezana
u smislu da je blokiranje poziva.
Ona će sjediti i čekati dok korisnikov preglednik
pokušava spojiti na ovom webu poslužitelja i tek onda će se
povratak istina ili laž, tako da smo nastavili u unutrašnjosti tog ako gubitka.
>> Jednom tamo, primijetiti tu funkciju na funkcija zove analizirati, koju je napisao,
koji analizira sve okteta, sve od bajtova dolaze iz preglednika
na poslužitelju, tako da se možemo predati što u konačnici vratiti vrijednost na jedan
tih globalnih varijabli koje pohranjuje sve od bajtova u samo
zaglavlja koje Zahtjev, ne tijelo
Ako su zapravo tijelo na njega.
>> Sada dolje počinjemo analizirati te zaglavlja izdvojiti
podskup podataka da mi je stalo.
Naime, po Specifikacija, prvo
htio zatražiti liniju, što je Samo da je prvi redak koji
nadam se kaže nešto poput get slash ili neki put i HTTP 1.1.
Mi koristimo ovu metaforu od igle u plastu sijena
tražiti određeni znakova ili adrese.
I doista, postoji niz djeluje u našoj distribucije koda
da vas, također, mogu pronaći korisne kada je u potrazi za određenim vrijednostima.
>> Na kraju, možemo kopirati ove bajtova u varijablu naziva linije,
koji primjećuju, također, da smo rasporediti na stog
na način da se dinamički dimenzioniran polje.
I mi smo namjerno pokušavaju kako bi se izbjeglo zove malloc
jer opet, jer kontrole C se
Potencijal značajka ovog programa, što Ne želim da se ovaj kod iznenada
prekinut korisničkom udaranje Kontrola C, rezultat kojih
je da nisam mogao imati šansu nešto besplatno što sam malloced.
Pa ja pokušavam što više koristiti u snopu mogu ovdje.
>> Zatim se, cijela hrpa DOS.
Specifikacija će izlagati na ono što se očekuje ovdje,
ali komentari vam nagovještaj onoga što je pred nama.
Najprije morate potvrditi zahtjev liniju
i pobrinite se da izgleda Specifikacije gramatike, da tako kažemo,
kaže da bi trebali.
Nakon toga je potrebno izdvojiti nešto nazvao upit, stvari se
Nakon upitnikom, kao što su vidjeli smo s našim Google primjer
u prolazu u HD parametra.
Mi zatim spojite zajedno korijen web poslužitelja
uz put koji je u da zahtjev Prva linija
i čine cijeli put file želimo tražiti.
>> Nakon toga, mi ćemo osigurati da datoteka postoji i čitati.
A onda ćemo izdvojiti njegov ekstenzija datoteke, .html ili .php,
ili neki takav produžetak koji je na Vrlo kraj niza tražene.
Dalje se je cijeli hrpa koda smo pisali
zapravo generiranje PHP generiran sadržaj za vas.
U Ukratko, to Kodeks uzima u ime
datoteke koju želite PHP interpretirati.
Mi to proći nešto što se zove cijev u PHP-a tumača.
Vrati se na odgovor, kao da Odgovor su sama datoteka.
A onda ćemo ponoviti tijekom koje file-a bajtova, sve ih vuče u jednu tampon
tako da možemo u konačnici ispisati ih.
>> Doista, sve ove poziva ovdje da dprintf
omogućuje nam da ispisati nešto naziva datoteke deskriptor, koji
je samo broj koja predstavlja sliku.
Vrlo slično u duhu, nego bitno razlikuje od datoteke
Star pokazivač.
Obavijest o tome kako možete koristiti sintaksu kao printf ovdje, tako da ja mogu dinamički
stavite nešto poput duljine za vrijednost HTTP zaglavlja
zove Content-Length.
I na kraju sam se Funkcija pravo zapravo pisanje
tijelo na zahtjev.
>> Nažalost, mi samo provodi podrška za dinamički
generira PHP datoteke.
Nismo implementirati podršku za statička datoteka kao što su GIF, JPEG i,
i CSS i HTML datoteke.
To, na žalost, je lijevo za vas odgovoriti na potrebe klijenta
to učiniti.
Dakle, tamo ćete naći da postoji nije puno inspiracije u tom bloku,
Ali, ako ste malo viši kako otišli smo o tumačenju PHP kod,
funkcije ćete koristiti su malo drugačiji.
>> U stvari, možete posuditi neke funkcionalne
Možda iz forenzike Problem set, jer
na kraju dana sve što je potrebno da se učiniti ovdje je kada znaš što otvoriti datoteku
i kada znaš da je takozvana MIME tip ili vrsta sadržaja,
trebate pročitati u tim bajtova i nekako ih pljuvati natrag.
>> A sad obilazak ovog file-a ostale funkcije.
Do prvog je povezano, koji se jednostavno vraća true
kada je konačno čuje Priključak od korisnika.
Dalje se je do pogreške.
Greška je u međuvremenu, što je funkcija smo pisao da obrađuju sve različite 400
i 500 HTTP status Šifre koje možda želite
poslati natrag korisniku, zajedno s standardnim poruke.
>> Dalje se je opterećenje, osobito mesnati funkcija, čija je svrha u životu
je čitati iz datoteke zvijezde pokazivač Sadržaj datoteke u globalni tampon
da mi je izjavio globalno prije [? Glavni. ?]
To je malo složeno jer mi moraju čitati bajtova iz datoteke
ali provjerite na svakoj iteraciji da li imamo već
hit kraj datoteke ili nešto drugo nije u redu.
I mi koristimo realloc kako bi bili sigurni da je god tampon koristimo raste
i raste i raste i uvijek borave ispred broja bajtova
da trebamo stati tamo.
Handler, u međuvremenu, je funkcija koja dobiva
pozvao na način što registrirana Upravljačka C kao signal
da želimo presresti.
Obavijest ovdje u vodiču da je to u konačnici
pozivi zaustaviti, što naravno zaustavlja web poslužitelja.
I na žalost, pretraživanje se ne provodi.
U duhu, to je prilično jednostavna funkcija.
S obzirom ekstenzija datoteke, to treba Za povratak to je tzv MIME
ili tip sadržaja.
A mi navesti u specifikaciji što je to mapiranje mora biti.
Ali morate prevesti što u konačnici c koda.
>> Slijedi nam je sličan mesnati funkcija zove analizirati, čija je svrha u životu
je čitati, a ne iz datoteke, ali iz mrežne veze.
Naime, čitanje i parsiranje HTTP zahtjev koji je došao iz preglednika
na poslužitelju, tako da u konačnici možemo analizirati
na samo zaglavlja u zahtjevu linije i vratiti one za vas
putem globalne tampon koji što je izjavio ranije [? Glavni. ?]
>> Reset, u međuvremenu, je Funkcija da definiramo
koji se zove iterativno iznutra glavne svaki put ste o
spremni za početak slušanja za novu vezu
tako da smo uvijek znali stanje naših varijabli
i tako da smo i oslobođen bilo kakve memorije koja
Možda su sredstva za Prethodna mrežne veze.
Dalje se je početak, Funkcija koju je napisao
koji sadrži cjelinu Puno umrežavanje koda
koji u konačnici pokreće web poslužitelj.
>> Prošle se je funkcija zove stanica, što
čini upravo to, to zaustavlja web poslužitelja.
No, prvo se oslobađa bilo kakve memorije koji još uvijek nije dodijeljeno.
No, u konačnici traži izlaz čak i bez povratka kontrole
našem glavnom funkciju.
U konačnici, jedan od najvažnijih tehnika
pri provedbi ove web poslužitelj će biti malo pokušaja i pogreške,
ima jedan prozor otvoren preglednik u pravu a terminal prozor na
lijevo, poslužitelji konzole prozor, tako da
Možete vidjeti poruke koje su se prikazuje na zaslonu.
>> No, još bolje bi bilo za trećinu prozor, drugi terminal prozor,
u kojoj ste koristiti Telnet, korištenja za koje je propisana u spec.
I Telnet je samo jako jednostavni mrežni Program
koja vam omogućuje da se pretvarati da se preglednik u jednom prozoru
dok je u razgovoru s drugom prozoru.
Na taj način možete vidjeti točno tekstualne naredbe
koji se vraćaju od poslužitelja do klijenta
bez poking oko Chrome je razvijen
Alati u protivnom clunkier sučelje.