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.