Podobne dokumenty
Wtedy wystarczy wybrać właściwego Taga z listy.

Tablice, procesy, sygnały i nie tylko. Kurs systemu Unix 1

Adapter USB do CB32. MDH-SYSTEM ul. Bajkowa 5, Lublin tel./fax lub kom e mail: info@mdh-system.pl

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

INSTRUKCJA RUCHU I EKSPLOATACJI SIECI DYSTRYBUCYJNEJ

Systemy mikroprocesorowe - projekt

INSTRUKCJA OBSŁUGI URZĄDZENIA: HC8201

Bazy danych. Andrzej Łachwa, UJ, /15

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Część 2 struktura e-paczki

Seria P-662HW-Dx. Bezprzewodowy modem ADSL2+ z routerem. Skrócona instrukcja obsługi

2.Prawo zachowania masy

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

INSTRUKCJA OBS UGI

Nadzwyczajne Walne Zgromadzenie Art New media S.A. uchwala, co następuje:

Sieci i systemy operacyjne I Ćwiczenie 3. Przekierowania strumieni we/wy. Filtry.

Poniżej instrukcja użytkowania platformy

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

p o s t a n a w i a m

Elementy cyfrowe i układy logiczne

Instrukcja użytkowania DRIVER. Programator z przewodem sterowniczym. DRIVER 610 lub lub 2 strefy DRIVER

1. Koło Naukowe Metod Ilościowych,zwane dalej KNMI, jest Uczelnianą Organizacją Studencką Uniwersytetu Szczecińskiego.

REGULAMIN STYPENDIALNY FUNDACJI NA RZECZ NAUKI I EDUKACJI TALENTY

HiTiN Sp. z o. o. Przekaźnik kontroli temperatury RTT 4/2 DTR Katowice, ul. Szopienicka 62 C tel/fax.: + 48 (32)

Procedura nadawania uprawnień do potwierdzania Profili Zaufanych w Urzędzie Gminy w Ryjewie

Linux LAMP, czyli Apache, Php i MySQL

Microsoft Management Console

Tester pilotów 315/433/868 MHz MHz

Procedura nadawania uprawnień do potwierdzania, przedłuŝania waŝności i uniewaŝniania profili zaufanych epuap. Załącznik nr 1

API transakcyjne BitMarket.pl

Przewodnik AirPrint. Ten dokument obowiązuje dla modeli atramentowych. Wersja A POL

IBM SPSS Statistics dla systemu Linux Instrukcje dotyczące instalacji (jeden użytkownik)

Logowanie do systemu Faktura elektroniczna

Instrukcja procesu aktywacji oraz obsługi systemu Banku Internetowego dla BS Mikołajki

INSTRUKCJA RUCHU I EKSPLOATACJI SIECI DYSTRYBUCYJNEJ

Projekty uchwał dla Zwyczajnego Walnego Zgromadzenia

- 70% wg starych zasad i 30% wg nowych zasad dla osób, które. - 55% wg starych zasad i 45% wg nowych zasad dla osób, które

Instrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8

oraz nowego średniego samochodu ratowniczo-gaśniczego ze sprzętem ratowniczogaśniczym

Mini stacja MP3 5w1 z Bluetoothem, radiem, zegarem, głośnikiem

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

RZECZPOSPOLITA POLSKA. Prezydent Miasta na Prawach Powiatu Zarząd Powiatu. wszystkie

Parczew: Zaciągnięcie kredytu długoterminowego w wysokości

Regulamin serwisu internetowego ramowka.fm

REGULAMIN. przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Oświaty w Szczecinie.

Budowa systemów komputerowych

KONCEPCJA NAUCZANIA PRZEDMIOTU RACHUNKOWOŚĆ SKOMPUTERYZOWANA" NA WYDZIALE ZARZĄDZANIA UNIWERSYTETU GDAŃSKIEGO

INSTRUKCJA OBSŁUGI WD2250A. WATOMIERZ 0.3W-2250W firmy MCP

Zarządzenie Nr 1469/2012

PERSON Kraków

PODRĘCZNIK UŻYTKOWNIKA

Zebranie Mieszkańców Budynków, zwane dalej Zebraniem, działa na podstawie: a / statutu Spółdzielni Mieszkaniowej WROCŁAWSKI DOM we Wrocławiu,

Microsoft Windows GDI

Szpital Iłża: Udzielenie i obsługa kredytu długoterminowego w wysokości zł na sfinansowanie bieżących zobowiązań.

WSTĘP DO PROGRAMOWANIA

ANALOGOWE UKŁADY SCALONE

CYFROWY MIERNIK REZYSTANCJI UZIEMIENIA KRT 1520 INSTRUKCJA OBSŁUGI

PROJEKTY UCHWAŁ NA NADZWYCZAJNE WALNE ZGROMADZENIE HETAN TECHNOLOGIES SPÓŁKA AKCYJNA W DNIU 25 MAJA 2016 ROKU

Instrukcja obsługi GPS VORDON

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Instrukcja obsługi. Oprogramowanie SAS 31

Pracownia internetowa w ka dej szkole (edycja 2004/2005)

INSTRUKCJA MONTAśU / OBSŁUGI ZESTAW VIDEODOMOFONOWY MT 200B-K1 / SAC5B-K1

Zainstalowana po raz pierwszy aplikacja wymaga aktualizacji bazy danych obsługiwanych sterowników.

MUP.PK.III.SG /08 Lublin, dnia r.

Warszawa, dnia 1 października 2013 r. Poz. 783 UCHWAŁA ZARZĄDU NARODOWEGO BANKU POLSKIEGO. z dnia 24 września 2013 r.

Regulamin Projektów Ogólnopolskich i Komitetów Stowarzyszenia ESN Polska

TABELA ZGODNOŚCI. W aktualnym stanie prawnym pracodawca, który przez okres 36 miesięcy zatrudni osoby. l. Pornoc na rekompensatę dodatkowych

BAKS Kazimierz Sielski Karczew ul. Jagodne 5. Tel./ fax (022) fax (022) NIP Zapytanie ofertowe.

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Metody opracowywania dokumentów wielostronicowych. Technologia Informacyjna Lekcja 28

Programator pamięci EEPROM

Analizuj c cykl pracy urz dzenia przebiegi czasowe sygna w wyj ciowych czujnik w pomiarowych. Rys.1. Przebiegi czasowe i tabela prawdy

PREFABRYKOWANE STUDNIE OPUSZCZANE Z ŻELBETU ŚREDNICACH NOMINALNYCH DN1500, DN2000, DN2500, DN3200 wg EN 1917 i DIN V

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Pokonać Ransomware. Grzegorz Ciołek Systems Engineer

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Umowa najmu lokalu użytkowego

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

PX319. Driver LED 1x2A/48V INSTRUKCJA OBSŁUGI

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

REGULAMIN WALNEGO ZEBRANIA STOWARZYSZENIA POLSKA UNIA UBOCZNYCH PRODUKTÓW SPALANIA

SPECYFIKACJA ISTOTNYCH WARUNKÓW ZAMÓWIENIA. na obsługę bankową realizowaną na rzecz Gminy Solec nad Wisłą

Centralizacji Systemu. Procedury zasilania danymi systemu LAS oprogramowania do aktualizacji LMN. etap C13 pkt 5

Instrukcja obsługi. Sterownik ścienny KJR10B/DP

Instalacja programów Ubuntu

Skrócony opis instalacji Sympodium DT770 Interaktywny ekran z cyfrowym piórem

1% r. ZWIĄZEK OCHOTNICZYCH STRAŻY POŻARNYCH RZECZYPOSPOLITEJ POLSKIEJ KRS: % podatku na rzecz Związku OSP RP

Załącznik do zarządzenia Rektora Krakowskiej Akademii im. Andrzeja Frycza Modrzewskiego Nr 8/2013 z 4 marca 2013 r.

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

I. 1) NAZWA I ADRES: Krajowa Rada Radiofonii i Telewizji, Skwer Ks. Kard. Wyszyńskiego 9,

Instrukcja zarządzania systemem informatycznym służącym do przetwarzania danych osobowych

2 Zarządzenie wchodzi w życie z dniem podpisania.

Harmonogramowanie projektów Zarządzanie czasem

Twierdzenie Bayesa. Indukowane Reguły Decyzyjne Jakub Kuliński Nr albumu: 53623

Transkrypt:

TajnySkryptdoWyk aduzunix-a wersja0.82 16pa dziernika1998 MarcinBenke

Spisrzeczy 1Wprowadzenie 1.2Kr tkahistoriaunixa... 1.1Najkr tszahistoriakomputer w... 1.4Systemoperacyjny... 1.3Kr tkahistorialinuxa... 1.5Systemplik w... 87 1.6Katalogiiplikispecjalne... 9 2Podstawypracyzsystemem 2.2Z ehas a...10 2.3Dobrehas a...11 2.1Przywitanieipo egnaniezsystemem...10 2.5Polecenia...11 2.4Shellinterpreterpolece...11 2.6Strumienie...12 3Systemplik w 2.7Kierowaniestrumieniami...12 3.1Zawarto katalogu-poleceniels...13 2.8Filtry...12 3.2Inneu yteczneopcjepolecenials...13 3.3Gdywydrukniemie cisi najednymekranie...14 3.7Jeszczeouprawnieniach...15 3.6Zmianauprawnie poleceniechmod...15 3.5Prawowykonywaniadlakatalogu...14 3.4Jakczyta wynikils-l...14 3.8Bie cykatalogizmianakatalogu...16 3.9Poleceniecd-czylitamizpowrotem...16 3.10Tworzeniekatalog w...16 3.11Usuwaniekatalog w...17 3.14Tworzenienowegodowi zaniadoplikuln...17 3.13Kopiowanieplik w-cp...17 3.12Usuwanieplik w...17 1

3.15Przesuwanieizmiananazwyplik wmv...18 4Procesy 3.17Edytory...19 3.16Modykacjeliniipolece...18 4.2Listaproces w-polecenieps...20 4.3Kolejnyprzyk adlistyproces w...21 4.1Poje cieprocesu...20 5Programowaniewshellu 4.4Procesywtle...21 5.1Skrypty(scenariuszedlainterpreterapolece )...23 4.5Procesywtlec.d...21 5.2Interpreterpolece strukturaleksykalna...23 5.3Wynikpoleceniakodstanu...24 5.6Przyk ad...25 5.5Konstrukcjafor...24 5.7Konstrukcjaselect...25 5.4 rodowisko...24 5.11U ytecznetesty...26 5.9Sk adnikiprzyk adu...26 5.10Polecenietest...26 5.8Konstrukcjaif...25 5.13Parametryskryptu...27 5.15Poleceniebasename...28 5.14Problempraktyczny...27 5.12Konstrukcjawhile...27 5.17Narz dziadoci ciaplik wnalinie...28 5.16Rozwi zanie...28 5.18...inakolumny...29 6PodstawyC 5.20Wyszukiwanieplik w...29 5.19Zastosowanie...29 6.3Najprostszyu ytecznyprogramwc...31 6.2Skryptdotestowaniaprogram w...30 6.1Skrypt,kt rymrobi emteslajdy...30 6.6Inicjalizacjazmiennych...32 6.4Sprawdzmy, etonieoszustwo...31 6.5Zmiennelokalne...32 6.7Funkcje...32 6.8Pisanietekstudostrumieniafprintf...33 6.10Zmiennenapisowe;zmienneglobalne...34 6.9Po ytecznyskr tprintf...33 2

6.14Argumentyfunkcji...35 6.11Tablice;p tlafor...34 6.12Skr tywc...34 6.15Strukturanapis w...36 6.13hello4jeszczeraz:...35 7U ywamyc 6.16Ulepszamywritelnfunkcjaputs...36 6.17Ulepszamyputswska nikiitablice...36 7.3D ugo napisuindeksyip tlawhile...38 7.1Argumentyfunkcjimain:argciargv...37 7.2D ugo napisuwska nikiip tlafor...38 7.6Makele...40 7.7Jaktodzia a?...40 7.5Kompilacjaprogramuwkilkuplikach...39 7.4Przyk adprogramug wnego...39 7.8Bardziejz o onyprzyk ad...41 7.9Wy wietlamydat przekazywaniewska nik w...42 7.10Strukturyprzyk ad...42 8Bibliotekawej cia/wyj cia:stdio 7.11Instrukcjabreak...44 7.12Instrukcjaswitch...44 8.1Programno1...45 8.2Programno2...45 8.3Funkcjestdio...46 8.7Programcount...47 8.5Funkcjefreadifwrite...46 8.6Programyes...47 8.4Funkcjafopen...46 8.8Programappend-by-char...48 8.9Programappend-by-line...49 8.13Funkcjaprint_utmp_entry...51 8.10Programappend-by-buffer...50 8.12Strukturautmp...51 8.11Programwho...51 9Systemowefunkcjewej cia/wyj cia 9.3JakPoprawnieu ywa creat...54 9.1Funkcjecreatiunlink...53 9.2Typowyb dprzyu yciucreat...54 9.5Funkcjaopen...55 9.6Funkcjereadiwrite...56 9.4Poprawneib dnedzia aniecreat...54 3

9.7Funkcjastatijejkrewniacy...56 9.11Programio-who...59 9.10Programio-append...58 9.9Programtimes...57 9.8Strukturastat...57 10Zaawansowanefunkcjewej cia/wyj cia 10.3Przyk ad...61 10.2Czytaniekatalog w...60 10.1Plikispecjalne...60 10.6Przyk adu yciaselect...63 10.4Sprytniejszydost pdokatalogu:scandir...61 10.5Funkcjaselect...62 10.7Komunikacjazterminalem...63 11Programowaniewsp bie neprocesy 10.8Jakwczytywa zterminalabezporednionaci ni teklawisze?.64 10.9Jakwczytywa bezecha(np.has o)?...65 11.2Identykatoryproces w...67 11.1 rodowisko...66 11.3Funkcjafork...68 12Sygna y 11.5Funkcjapipe...70 11.4Rodzinafunkcjiexec...69 12.3Como nazrobi zsygna empojegootrzymaniu?...76 12.2Obs ugasygna wfunkcjasignal...75 12.1Wysy aniesygna w...75 12.4Grupyproces w...78 12.5Wysy aniesygna udogrupyproces w...79 13Gniazda 12.7Operacjenazbiorachsygna w...81 12.6Sygna yposix...80 14Flex 14.1Pro ciutkiprzyk ad...85 84 14.2Og lnaposta denicjiskanera...85 14.3Akcjez o one...86 14.7Zawarto leksemu:zmiennayytext...87 14.6Liczenieliniiiznak w...87 14.5Usuwaniezb dnychodst p w...87 14.4Wzorce...86 14.8Klasyznak wiwsp lneakcje...88 4

15Bison 15.2Flexpomo enapisa skaner...91 15.3Operatoryinksowe;priorytetyiwi zanie...91 15.1KalkulatordlaRPN...89 5

Ostrze enie #include<std/disclaimer.h>;-) poprostuinaczejsformatowana(albowog leniesformatowana)zawarto skryptem,alecowi cejjesttajny. Wiedzapodawanajesttuwyrywkowoiskr towo,wdu ejcz cijestto Tendokument,zgodniezeswymtytu em,nietylkoniejestocjalnym slajd w.si rzeczywwielumiejscachbrakujekomentarzy,kt rewyg asza emnawyk adzie,alekt renieznalaz ysi naslajdach.dlategojego je likto bardzochce... u yteczno dlaos bkt renieucz szcza ynawyk adjestw tpliwa.ale 6

Rozdzia 1 Wprowadzenie 1.1IGeneracja(1945-55):Lampyidruty adnychsystem wanij - zyk wprogramowania,jedenu ytkownik aczacydrutyiodczytuj cy Najkr tszahistoriakomputer w IIGeneracja(1955-65):Tranzystoryisystemywsadoweprogramy wynikzmrugaj cychlampek;komputeryunikalneibezcenne; godzinach;cenaprzeci tnegokomputera(np.ibm7094)kilkamilion wdolar w; idanenakartachdziurkowanych;zadaniaprzepuszczaneprzezmaszynekolejnoprzezoperatora,wydrukidoodbiorucz stopokilku IIIGeneracja(1965-80):Uk adyscaloneiwsp bie no wielezada wsadowychprzetwarzanychr wnocze niedlalepszegowykorzystania IVGeneracja(1980-90):Uk adyvlsiikomputeryosobistemikrokomputeryjakostacjeroboczealbojakotaniwariantminikomputer w procesora(os/360);pocz tkisystem winterakcyjnych(multics, UNICS,minikomputeryDECPDPca.120000$) 1.2ceny120tys.dolar w;cp/m,ms-dos,unix;systemysieciowei rozproszone. Pierwszawersja(1969)Stworzona(samodzielnie)przezKenaThompsonazBellLabsnaPDP-7wj zykub. Kr tkahistoriaunixa Podwra eniemsystemustworzonegoprzezthompsona,dennisritchie zatonagrod Turinga. pracownikamibelllabsstworzyliunixnapdp-11;w1974otrzymali stowrzy ulepszon wersj j zykabpodnazw C,wsp lniezinnymi 7

Unixby rozdawanyuniwersytetomzasymboliczn op at (wersja6); W1984AT&TwypuszczaUnixSystemIII,potemza systemvr2, R3.ObecniemamyR4. eksplozjapopularno ciwdrugiejpo owielat70-tych(wersja7). R wnolegleuniversityofcaliforniaatberkeleytworzywoparciuowerj 6w asn wersj podnazw 1BSD.Istotneobecniewersj to4.3bsd IEEEwprowadzastandardyUnixapodnazwamiPosix1003.0do1003.10; i4.4bsd W1991LinusTorvalds,studentzHelsinek,piszepierwsz werj Linuxa ANSIstandaryzujej zykc 1.3Sierpie 1991wersja0.01tylkokernel 5pa dziernika1991pierwszaocjalnawersja(0.02)bash,kompilatorc(gcc) Kr tkahistorialinuxa Marzec1994Wersja1.0 1992Wersje0.100.12,awkr tcepotem0.95 Marzec1995Wersja1.2(akaLinux'95) Kwiecie 1995Wersja1.1 Lipiec1996Wersja2.0 Obecnie(pa dziernik98):wersje2.0.36(stabilna)oraz2.1.125(ekspe- Obs ugaurz dze Systemplik w Systemoperacyjny Czerwiec1995Wersja1.3 1.4rymentalna) Zarz dzaniezasobami U ytkownicyizapewnianiebezpiecze stwa Procesy(programy) 8

Komunikacjazu ytkownikiemshelliokienka Komunikacjaze wiatem(nietylko)innekomputery Podstawowefunkcjesystemuoperacyjnegos wunixiespe nianeprzezj dro, Innenarz dzia rodowiskotworzeniaaplikacji inneprzezwyspecjalizowaneprocesy,tzw.demony. 1.5Pliki Katalogi Systemplik w Plikispecjalne 1.6Do czanieinnychsystem wplik w Katalogis struktur odwozorowuj c nazwyplik w( cie kidost pu)na faktycznepliki.wunixiekatalogis zrealizowanejako(wyr nione)pliki. Katalogiiplikispecjalne posta dag-u jednak... Ka dykatalogmo ezawiera innekatalogi,cosugerujestruktur drzewiast, doprzejrzysto cibudowysystemuiaplikacji,gdy komunikacjazurz dzeniamiopierasi natychsamychzasadachcoczytaniezipisaniedoplik w. WUnixieurz dzenias widocznejakoplikispecjalne,coprzyczyniasi...doka degoplikumo eby wieledowi za,azatemsystemplik wma 9

Rozdzia 2 Podstawypracyzsystemem 2.1 Wceluwej ciadosystemunale ypoda sw jidentykatorihas o: zodiac1login:benke Przywitanieipo egnaniezsystemem Password: Lastlogin:FriMar811:58:19frombratek.mimuw.edu zodiac1:~$ klawiszkomunikatem zodiac1:~$use"logout"toleavetheshell. CzasamiwystarczanacisniecieCtrl-d,czasamisystemreagujenaten Abywyj zsystemunajpewnieju y poleceniaexit. Znaczyto etrzebajednaku y exit. natwojekonto,albozrobi Cig upidowcip. kt rymjeste zalogowanykto mo enarozrabia Pami taj:niezostawiajnad u ejterminalana 2.2 Wybierzhas o atwedozapami tania,trudnedozgadni ciadlaosobypostronnej.otoprzyk adyz ychhase : Z ehas a pawel1 zlepkis w,ichlustrzanychodbi icyfr: wi cnies dobrymihas amis owanawetwegzotycznychj zykach,albo Hackerzydo amaniahase u ywaj oczywi cieprogram wis ownik w, EwaEwa Kowalski 10

2.3 mellonlewapawe7 Dobrehas awyborowa Prozac znak wprzestankowych,albopierwszeliterys wjakiego fragmentuutworu Najlepszymihas amis przypadkowe, atwemnemoniczniezlepkilitercyfri literackiego.naprzykladz Mo emywygenerowa has osl,atfat Solong,andthanksforallthefish(D.Adams) zw komputera. Nale yunika zapisywaniahas a,zw aszczarazemzna- 2.4 shella(sh)orazodpowsta egowberkeleyc-shella(csh). Popularnes dwierodzinyshelli:wywodz cesi odstarounixowegobourne Shellinterpreterpolece Shell),dodrugiejszerokorozpowszechnionyTenexshelltcsh. echo$shell Dopierwszejrodzinynale ystandardowynalinuxiebash(bourneagain [11:19:00]ben@kawa:~>echo$SHELL /bin/bash Abyprzekona si wjakimshellupracujemy,nale ywykona polecenie herbata:/home/zls/benke>echo$shell /bin/tcsh Tujakwida dzia abash......atutcsh. Wi kszo polece wydawanychsystemowimaposta 2.5 programargumenty... Polecenia zodiac1:~$cat/proc/version Naprzyk adpolecenie catplik-1plik-2...plik-n powodujewypisaniezawarto cipliku/proc/versionnaterminal.og lniej, Linuxversion1.3.56(root@zodiac1)(gccversion2.7.2)#2WedJan1019:45:43MET1996 wypisujekolejnozawarto podanychplik wnaterminal. 11

programwunixieoperujena(conajmniej)trzechstrumieniachznak w: 2.6 Taknaprawd tenmechanizmjesttroch bardziejskomplikowany.ka dy Strumienie wyj ciowym(standardoutput) komunikat wob dach(standarderror) wej ciowym(standardinput) Programcatwypisujezawarto podanychplik wnawyj cie,aje lizosta wywo anybezargument w,toczerpiedanezwejscia;je liwyst pi b dy, toinformacjaotymzostaniewypisananastrumie b d w. Standardowowszystkietrzystrumienies przy czonedoterminala.shell 2.7 pozwalajednaknaprze czenieichdoinnychplik w: Kierowaniestrumieniami fraza>fuczynitosamozestrumieniemwyj ciowym. fraza<fwdowolnymmiejscupoleceniaprzy czystrumie wej ciowy doplikuf giego,za cat>fzapiszewplikufto,cowpiszemyzklawiatury. N.p.catplik-1>plik-2przepiszezawarto cjednegoplikudodru- Zagadka:pocowyr nionostrumie b d w? Zagadka:jakib dzieefektcat<f? strumieniemwej ciowyminnegoprzezrur (pipe),np 2.8 Istniejemo liwo po czeniastrumieniawyj ciowegojednegoprogramuze Filtry ewojcik:ewawojcik eostasz:ewaostasz ewka:ewakazana zodiac1:~$cat/etc/passwd grep-iewa cut-f1,5-d: Wieleprogram wwunixiejestpomy lanychjakoltry.klasycznymprzyk ademjesttuw a niegrepprzepuszczatylkoliniezawieraj cepodany wzorzec. 12

Rozdzia 3 Systemplik w zodiac1:~$ls/ bin/ 3.1 Zawarto katalogu-poleceniels shlib/ dev/ mnt/ tmp/ etc/ mnt2/ boot/ mud/ usr/ bootdsk/ home/ proc/ var/ cdrom/ lib/ root/ vmlinuz dbin/ linux/ Wi cejszczeg wzapewninamu ycieopcji-al drwxr-xr-x19root zodiac1:~$ls-al total7 2benke teachers 1024Mar413:01../ 1024Mar1511:17./ 49Mar816:13dd 3.2 -rw-r--r-- Inneu yteczneopcjepolecenials 1benke staff 7Mar816:13f 5Mar816:13ddd -spodajrozmiarplikuwblokach(wlinuxieblok=1kb) -rodwr kolejno cwypisywaniaplik w -tsortujwed ugdatyplik w -Rlistujrekurencyjniewszystkienapotkanekatalogi(Uwaga:cz sto -Xsortujwed ugrozszerzenia(tylkolinux) -Ssortujwed ugrozmiaruplik w(tylkolinux) oznaczatobardzod ug list plik w) --helppomoc(tylkolinux) 13

3.3...mo epom cprogrammore.(wlinuxiewyst pujerozszerzonawersja Gdywydrukniemie cisi najednymekranie... tegoprogramupodnazw less).jesttoltrdzia aj cyprawietaksamo Entermoreprzepu cijeszczejedn lini, czekanapolecenieu ytkownika.terazmo emynacisn : jakcat,ztym, epoprzepuszczeniujednegoekranutekstuzatrzymujesi i spacjaprzepu cijeszczejedenekran, /napisprzejdziedonajbli szejliniizawieraj cejnapis, qzako czywy wietlanie. bcofnieojedenekran(tylkoless), lrwxrwxrwx 3.4 drwxr-xr-x51benzls5120mar1513:30. Jakczyta wynikils-l prawadost pudopliku Pierwszakolumna:1znakokre laj cytypplikui3*3znakiokre laj ce 10May311995Install->../install dkatalog wprawodopisania rprawodoczytania llinksymboliczny czas,nazwa. Dalejkolejno:ilo dowi za,w a cicielpliku,grupa,rozmiar,dataiew. xprawodowykonywania drwxr-xr-x zodiac1:~$ls-ldtrash 3.5 Prawowykonywaniadlakatalogu zodiac1:~$ls-ltrash total5 2benke staff1024mar2212:09trash/ -rw-r--r-- zodiac1:~$chmod-xtrash 1benke staff 6Mar2212:091 146Mar2212:092

drw-r--r-- zodiac1:~$ls-ldtrash zodiac1:~$cattrash/1 cat:trash/1:permissiondenied 2benke staff1024mar2212:09trash/ 3.6 chmod[-fr]trybplik... chmod[ugoa]{+ - =}[rwxlssttugo]plik... Zmianauprawnie poleceniechmod =powodujeustawieniedok adniepodanychuprawnie (kasuj cpozosta e). zmiana(user,group,others,all) Kombinacjaliterugoaokre lakt rychu ytkownik wdotyczy b dzie Przyk ady: Operator+powodujedodaniewybranychuprawnie,-ichusuni cie,za chmodu+xf chmodg+wf chmodo-rf 3.7Zmianyprawdost pudoplikumo edokona tylkojegow a ciciel. [ben@trawaben]$date>plik [ben@trawaben]$catplik Jeszczeouprawnieniach [ben@trawaben]$chmodug-rwplik [ben@trawaben]$ls-lplik -rw-rw-r-- TueOct616:53:37CEST1998 [ben@trawaben]$ls-lplik -------r-- 1ben 1ben 30Oct616:53plik [ben@trawaben]$catplik Przytakichustawieniachw a cicielplikuniemo egoodczyta... 30Oct616:53plik...mo egojednakskasowa : [ben@trawaben]$rmplik cat:plik:permissiondenied rm:remove`plik',overridingmode0004?y 15

3.8 Dowy wietlaniabie cegokatalogus u ypoleceniepwd: Bie cykatalogizmianakatalogu [ben@trawaunix]$pwd /home/ben/zajecia/unix cd[katalog](bezargument wprzeniesienasdodomu) [ben@trawaunix]$pwd Dozmianybie cegokatalogus u ypolecenie /home/ben/zajecia/unix [ben@trawaunix]$cd [ben@trawa/]$pwd [ben@trawaben]$pwd /3.9 /home/ben [ben@trawaben]$cd/ cd-poleceniecd-czylitamizpowroteprzeniesienasdoostatnioodwiedzanegokatalogu: [ben@trawaunix]$pwd /home/ben/zajecia/unix [ben@trawabigcyc]$pwd [ben@trawaunix]$cd- [ben@trawaunix]$pwd /home/ben/mp3/bigcyc [ben@trawabigcyc]$cd- /home/ben/zajecia/unix Poleceniemkdirdtworzywbie cymkatalogukatalogonazwied. 3.10 Mo emyte stworzy katalogwinnym,istniej cymju katalogu,np. Tworzeniekatalog w mkdir/tmp/d. zodiac1:~$mkdirnie/ma/mnie mkdir:cannotmakedirectory`nie/ma/mnie':nosuchfileordirectory Niemo nastworzy kilkupoziom wnaraz,np: 16

Pustykatalogdmo nausun cprzypomocypoleceniarmdird. 3.11 Usuwaniekatalog w DOSposiadaidentycznepoleceniamkdirirmdiroraz skr tydlanichmdird.wunixietychskr t wnie ma. Poleceniermplik-1...plik-nusuwapodanepliki.Wtympoleceniu, 3.12 podobniejakwewszystkichinnych,listaplik wmo eby efektemrozwini ciaprzezshellwzorca Usuwanieplik w?pasujedojednego,dowolnegoznaku *pasujedodowolnegonapisu Elementywzorc w: wielk liter. Naprzyk ad?[a-z]*pasujedowszystkichnazw,kt rychdrugiznakjest [...]pasujedodowolnegoznakuwymienionegowmiejsce... 3.13 rm-rdusuwacalepoddrzewozaczynaj cesieodkatalogud rm-iplikipytaozgodeprzedusuni ciemka degopliku cp[-iv]sk ddok d Poleceniecpmadwiepostacie: Kopiowanieplik w-cp tworzykopi plikusk dpodnazw dok d umieszczakopiewymienionychplik wwkatalogudok d cp[-iv]pliki...dok d tworzynowedowi zaniedoplikuspodnazw d.odt dpliktenjestdost pnypodobydwomanazwami.usuni cieslubdpowodujeznikni cietylko 3.14 lnsd Tworzenienowegodowi zaniadoplikuln dowi zaniaplikdalejistniejeijestdost pnypoddrug znazw: 17

[ben@trawaunix]$ls-ilplik [ben@trawaunix]$cpplikkopia [ben@trawaunix]$ls-ilplikkopia 24638-rw-rw-r-- 24639-rw-rw-r-- 1ben 0Oct719:35plik [ben@trawaunix]$lnpliklinka [ben@trawaunix]$ls-ilpliklinka 24638-rw-rw-r-- 1ben 0Oct719:36kopia 0Oct719:35plik [ben@trawaunix]$ls-llinka [ben@trawaunix]$rmplik 24638-rw-rw-r-- 2ben 0Oct719:35linka -rw-rw-r-- 1ben 0Oct719:35linka 0Oct719:35plik mv[-iv]sk ddok d Zmienianazw plikusk dnadok d 3.15 Przesuwanieizmiananazwyplik wmv cji,urz dzenia),kosztwykonaniamvniezale yodrozmiarupliku.wtakim przesuwawymienioneplikidokatalogudok d Je liprzesuni cieodbywasi wobr biejednegosystemuplik w(party- mv[-iv]pliki...dok d wypadkumvsdjestr wnowa ne 3.16 lnsd;rms Cz stozdarzasi, epomylimysi wpisuj cpolecenie,albote chcemywykona poleceniepodobnedojednegozuprzedniowykonanych.zamiastwpisywa wszystkoodnowamo emyprzywo a w a ciwepolecenieiwykona kombinacjectrl-p(poprzednia)ictrl-n(nast pna) Doporuszaniasi poli ciewykonanychpolece s u strza ki",#,lub Modykacjeliniipolece jepodokonaniuzmian. Ctrl-apocz teklinii,ctrl-ekonieclinii Ctrl-bznakwty,Ctrl-fznakwprz d Dozmianmo nau ywa kursor wlubklawiszy Ctrl-dusu znak,esc-dusu s owo Esc-bs owowty,esc-fs owowprz d 18

3.17 vijestnaka dymunixie,aleskrajnieniewygodny.dlafanatyk w: manvi. Edytory joestandardowywlniuxie,pozatymrzadkospotykany.ma y,wygodny,klawiszologiaopartanawordstarze.powywo aniuctrl-kh emacswi cejni edytor,uniwersalnenarz dziedoprawiewszystkichczynno ciwunixie.obiektreligijnegoniemaluwielbieniab d niech ci wy wietlipomoc. tysi cyu ytkownik wunixa.powywo aniupolecamctrl-httutorial,orazctrl-hiinfo,mn stwoinformacjinietylkooemacsie. 19

Rozdzia 4 Procesy 4.1procesjestabstrakcj dzia aj cegoprogramu; adenprocesniemo ezak ci dzialaniainnegoprocesu,anij dra Poje cieprocesu komunikacjamiedzyprocesamimo ezachodzi tylkozaobop ln zgod ; procesmo epowo a do yciadzieckoprocespotomny,kt rydziedziczykod,daneiotwarteplikirodzica; (lubnie)najegozako czenie; systemu; rodzicniemo ewp ywa nadzia anieswojegodziecka,alemo eczeka ie)? Pytaniedlahacker w:czymsi robidzieci(wunix- zodiac1:~$ps-u USER 4.2 Listaproces w-polecenieps benke 112620.00.8800280pp0R 110530.12.01136644pp0S PID%CPU%MEMSIZERSSTTYSTATSTART 11:01 10:55 0:00ps-u 0:00-bash TIMECOMMAND %CPU,%MEMwykorzystanieprocesoraipami ci USERw a cicielprocesu SIZEca kowityrozmiarprocesu PIDidentykator(numer)procesu 20

STARTkiedyproceszosta uruchomiony TIMEileczasuprocesorazu y TTYterminalzwi zanyzprocesem RSSfaktycznyrozmiarwpami ci 4.3 COMMANDjakzosta uruchoniony(argv) USERKolejnyprzyk adlistyproces w PIDTTYSTATSTART 128?SW 19:14 1:09init[5] 0:00(kernelbdflush) 0:01update(bdflush) TIMECOMMAND 43 60 19:20 0:02/usr/sbin/crond-l8 rmilczew8735pp6s sosnowsk6294 root 1407v01S 10:01 08:54 20:05 0:00-sh 0:00(tcsh) 0:00(agetty) 1:56/usr/sbin/syslogd mkorsako10500pp4s mkorsako10446pp4s pkozlows10443pp2s mgruszcz9906?s 10:38 10:23 0:02telnetbull 0:00-bash 0:11netscape 4.4 je lipoleceniezako czymyznakiem&,toshellnieb dzieczeka najego zako czenie,leczuruchomigowtle: Procesywtle zodiac1:~$find/-name.xdefaults-print2>/dev/null& [1]12548 /home/sml/dabrowa/.xdefaults 11053pp0S zodiac1:~$ps /home/sml/jakacki/.xdefaults 12625pp0R 12548pp0S PIDTTYSTATTIMECOMMAND zodiac1:~$/home/sml/kusmirek/.xdefaults 0:00-bash 0:00ps 0:11find/-name.Xdefaults-print 4.5Nienale yuruchamia wtleproces winterakcyjnych,takichjakedy- tory(wyj tek:procesymaj ceswojew asneokno); Procesywtlec.d. 21

Procesykt redzia aj wtle,akt rychcelemjesttrwanie,nieza Przyuruchamianiuwtleprocesukt rycoswypisuje,najlepiejskierowacjegowyj ciedopliku; WUNIX-iedemony wiadcz rozmaiteus ugisystemoweczysieciowe. zako czenienazywasi demonami 22

Rozdzia 5 Programowaniewshellu 5.1 Wykonywaneczynno cimo naautomatyzowa przypomocytzw.skrypt w. Skrypttopoprostupliktekstowyzawieraj cykolejnepoleceniadlainterpretera. [ben@trawaunix]$catscript1 echo$shell Przyk ad: Skrypty(scenariuszedlainterpreterapolece ) [ben@trawaunix]$./script1 ls-lscript1 5.2 /bin/bash -rwxrwxr-x Interpreterpolece strukturaleksykalna 1ben 27Oct916:24script1 Nazwaci glitericyfrzaczynaj cysi odlitery Potokci gfrazpo czonychsymbolami Frazaci gs woddzielonychblankami;symbole;&&& maj Listaci gpotok wpo czonychsymbolami;&&& znaczeniespecjalne. jakonazwaprogramudowykonania. Listauj tawnawiasyjestfraz. Prostepolecenietofraza,wkt rejpierwszes owojestinterpretowane 23

5.3 Wykonanieka dejfrazydostarczawyniku(liczbowegokodustanu).powinien onwynosi 0je liwykonaniesi powiod o. Wynikpoleceniakodstanu dzonyznakiem!,wynikzostaniezanegowany. &poprzednipotokjestwykonywanyasynchronicznie; Spos bwykonanialistyzale yodsymboli cz cychjejelementy: Wynikiempotokujestwynikostatniejjegofrazy.Je lipotokjestpoprze- &&nast pnypotokzostaniewykonanytylkogdywynikiempoprzedniego ;wykonanienast pnegopotokuzostanierozpocz tepozako czeniuwykonaniapoprzedniego; by o0 nast pnypotokzostaniewykonanytylkogdywynikpoprzedniegoby 5.4r nyod0 mo emyuzyska przez$nazwa.pewnezmiennes zwi zanew rodowisku rodowiskowi enazwy(zmienne)zichwarto ciami.warto zmiennej rodowisko globalnym,np. zodiac1:~$echo$mail /var/spool/mail/benke val=3 echo$val Innymzmiennymmo emynadawa warto wewn trzskryptu,np. j c, ezosta wywo anyzparametrami). 5.5Przez$nmo emyuzyska warto n-tegoparametruskryptu(zak ada- Sk adnia: fornazwains owo...;dolista;done Konstrukcjafor niulisty,warto ci zwi zan znazw jestbie ces owo. Wykonujelist dlaka degowymienionegos owa;przyka dymwykona- Listas wzawartami dzyinadomo eby wynikiemrozwini ciawzorca. 24

TSU.dvi 5.6 [ben@trawaunix]$foriin*.dvi;doecho$i;done Przyk ad fs.dvi oview.dvi proc.dvi sh.dvi shell.dvi 5.7 Sk adnia: selectnazwains owo...;dolista;done Konstrukcjaselect kowananastderr,ka dyelementpoprzedonynumerem.nast pniewy wie- tlanyjestpromptiwczytywanajestjednaliniazwej cia.je lijejzawarto stanowijedenzwy wietlonychnumer w,zmiennanazwaprzyjmujewarto Wzorcewyst puj cew r ds ws rozwijane.wynikowalistajestdru- elementuoznaczonegotymnumerem. Przyk ad 2)fs.dvi break;done [ben@trawaunix]$selectiin*.dvi;doecho$i; #?5 sh.dvi 1)TSU.dvi 4)proc.dvi 3)oview.dvi 6)shell.dvi 5)sh.dvi 5.8 Sk adnia: iflistathenlista1elselista2fi Konstrukcjaif wprzeciwnymwypadkulist 2. Przyk ad: Je liwyniklistynast puj cejpoifby pomy lny(0),towykonujelist 1 zodiac1:~$if(true)thenechotak;elseechonie;fi tak zodiac1:~$if(false)thenechotak;elseechonie;fi nie 25

falsezawszesygnalizujeniepowodzenienicnierobi c truezawszesygnalizujesukcesnicnierobi c 5.9 Sk adnikiprzyk adu echoswypisujenapiss;znakispecjalne(np.*,?)s interpretowane. Jakib dzieefektwykonaniapoleceniaecho*? 5.10 Sk adnia: testwyra enie Polecenietest Przyk ad: zodiac1:~$if(test`expr2+2`-eq4) Dajewynik0(prawda)je liwyra eniejestprawdziwe. cztery 5.11 >thenechocztery;elseecho\?;fi -dplikplikistniejeijestkatalogiem -eplikplikistnieje U ytecznetesty Przyk ad: -tn -rplikplikistniejeimamyprawojegoczytania -dplikplikistniejeijestzwyk ymplikiem zodiac1:~$if(test-t1)then(echo`tty`)else(echo\?)fi strumie onumerzenjestzwi zanyzterminalem [ben@trawaunix]$catwynik >else(echo\?)fi>wynik /dev/ttyp0?oczywi ciepolecammantest [ben@trawaunix]$if(test-t1)then(tty) 26

Sk adnia: 5.12 whilelistalistadolista1done Konstrukcjawhile list 1. Przyk ad: Takd ugojakwyniklistynast puj cejpoifby pomy lny(0),wykonuje >done >echo"nacisnijctrl-cbyprzerwac";sleep5 zodiac1:~$while(true)do NacisnijCtrl-Cbyprzerwac 5.13 $nn-typarametrskryptu $#liczbaparametr wskryptu Parametryskryptu Przyk ad: $*wszystkieparametry echo$# #!/bin/sh echo$0 foriin$*;do echo$i #...wypiszliczbeparametrow... #wypisznazweskryptu... done 5.14 Problempraktyczny #...wypiszkolejneparametry..dvi.chcemyprzezwa jetakbyka dymia rozszerzenienp.dvd Mamywkatalogupewn (by mo edu )liczb plik wzrozszerzeniem [ben@trawaunix]$mv*.dvi*.dvd mv:whenmovingmultiplefiles,lastargumentmustbeadirectory Spr bujmy: Taksi oczywi cienieda... 27

[ben@trawaunix]$foriin*.dvi;domv$i$i.dvd;done TSU.dvi.dvd [ben@trawaunix]$ls*.dvd ops! fs.dvi.dvd proc.dvi.dvd oview.dvi.dvdsh.dvi.dvd shell.dvi.dvd 5.15 basename cie karozszerzenie odcinazargumentu cie kawiod cekatalogiipodanysuks,np. Poleceniebasename mv-v$i`basename$i.dvd`;done [ben@trawaunix]$foriin*.dvi.dvd;do [ben@trawaunix]$basenametsu.dvi.dvd.dvd fs.dvi.dvd->fs.dvi oview.dvi.dvd->oview.dvi proc.dvi.dvd->proc.dvi TSU.dvi.dvd->TSU.dvi sh.dvi.dvd->sh.dvi shell.dvi.dvd->shell.dvi [ben@trawaunix]$foriin*.dvi 5.16 domv-v$i`basename$i.dvi`.dvd;done Rozwi zanieproblemu proc.dvi->proc.dvd oview.dvi->oview.dvd fs.dvi->fs.dvd TSU.dvi->TSU.dvd sh.dvi->sh.dvd 5.17 shell.dvi->shell.dvd grepwzorzecplikiwyszukujeliniezawieraj cewzorzec Wszystkiewymienioneponi ejprogramydzia aj te jakoltry Narz dziadoci ciaplik wnalinie... tail-nplikdostarczanostatnichliniipliku head-nplikdostarczanpierwszychliniipliku 28

tail+nplikdostarczawszystkieopr cznpierwszychlinii Zagadka:Jakuzyska dok adnien-t lini pliku 5.18 cut-cm-nplik Wycinazpliku(b d strumienia)kolumnyodm-tejdon-tej.przyk ad:...inakolumny $ps $ps tail+2 cut-c1-6 tr"\012""";echo 5573pp7R 3178pp7S PIDTTYSTATTIMECOMMAND 3178 5580 5581 0:00ps 0:00-bash 5582 5583 Polecenietrnako cupotokuzamieniaznakiko calinii naspacje.tou ytecznytrick. Zagadkadlahacker w:pocoechonako cu? 5.19 $kill`ps tail+2 cut-c1-6 tr"\012"""` Zastosowanie findkatalogwyra enie 5.20 Obchodzidrzewokatalog wpoczynaj codwskazanegoiwyszukujewszystkieplikspe niaj cewyra enie find/-namecorewyszukaplikionazwiecorewca ymsystemie find/home-atime+300wyszukaplikinieu ywaneodconajmniej find.-mtime-7wyszukaplikinowszeni tydzie Przyk ady: Wyszukiwanieplik w 300dniwkatalogachu ytkownik w Bardzopolecammanfind. 29

Rozdzia 6 PodstawyC 6.1 envelope Skrypt,kt rymrobi emteslajdy #!/bin/sh catheader.tex foriin$*;do echo'\\vbox{\\texttt'{$i}\\hrule' echo'\\begin{verbatim}' cat$i echo'\\end{verbatim}' done cattrailer.tex echo'\\hrule}\par\medskip' 6.2 #!/bin/sh statusskryptdotestowaniaprogram w prog=$1#zapamietajnazweprogramu shift $prog$* echo$? #Wykonajprogramzpodanymiargumentami #Przenumerujwszystkieargumentyo1wdol #Podajkodstanudostarczonyprzeztenprogram 30

benke:zpulqe98b6dfm:2041:100:marcinbenke:/home/staff/teachers/benke:/bin/bash 0zodiac1:~/C$statusgrepnie_ma_mnie/etc/passwd benny:dr7uwn/44vchy:618:600:grzegorzgrabowski:/home/sml/benny:/bin/bash zodiac1:~/c$statusgrepben/etc/passwd 16.3 true.c intmain() Najprostszyu ytecznyprogramwc {return0;/*dostarczkodstanu0*/ } zodiac1:~/c$maketrue gcc-wall Najprosciejskompilowa naszprogramu ywaj cmake zodiac1:~/c$statustrue -rwxr-xr-x zodiac1:~/c$ls-ltrue true.c 1benke-otrue 06.4 staff 3776Apr1819:32true* seven1.c intmain() Sprawdzmy, etonieoszustwo... }Innametodakompilacji: {return7; /*Dostarczkodstanu7*/ zodiac1:~/c$statusseven1 7zodiac1:~/C$gcc-oseven1seven1.c 31

seven2.c 6.5 intmain() Zmiennelokalne {intresult; } returnresult;/*dostarczwartosczmiennejresult(7)*/ result=7; /*Nadaniezmiennejresultwartosci7 /*resultjestzmiennalokalnatypuint*/*/ 6.6 intmain() seven3.c Inicjalizacjazmiennych {intresult=7; } returnresult; seven4.c 6.7 intresult() Funkcje {return7; }intmain() {returnresult(); } 32

6.8 #include<stdio.h> hello1.c Pisanietekstudostrumieniafprintf intmain() {fprintf(stdout,"hello,stdout!\n"); }$hello1 fprintf(stderr,"hello,stderr!\n"); Hello,stderr! $hello1>/dev/null Hello,stdout! 6.9 #include<stdio.h> hello2.c Po ytecznyskr tprintf intmain() {printf("hello,bravenewworld." }$hello2 "Themoonisaharshmistress!\n"); Hello,bravenewworld.Themoonisaharshmistress! 33

6.10 #include<stdio.h> hello3.czmiennenapisowe;zmienneglobalne char*message="hello,bravenewworld!\n"; intmain() {printf(message); } $statushello3 Hello,bravenewworld! 16.11 #include<stdio.h> hello4.ctablice;p tlafor char*message[4]={"hello\n","brave\n","new\n","world!\n"}; intmain() {inti; for(i=0;i<4;i=i+1) } }{printf(message[i]); 6.12 Zamiasti=i+1mo emynapisa i+=1,anaweti++.podobniezamiast i=i-1mogliby mynapisa i-=1alboi--. Skr tywc nawiasyklamrowe: for(i=0;i<4;i=i+1)printf(message[i]); Ponadtoje icia op tlisk adasi zjednejinstrukcji,mo emypomin Nale yjednakbardzouwa,abynienapisa tak: 34

for(i=0;i<4;i=i+1); wykonasi instrukcjapusta,ainstrukcjaprintfwykonasi raz,pozako czeniupustejp tli. To(czyli rednikzarazponawiasiezamykaj cym)spowoduje, ewp tli printf(message[i]); #include<stdio.h> 6.13 hello4.chello4jeszczeraz: char*message[4]={"hello\n","brave\n","new\n","world!\n"}; intmain() {inti; }$hello4 for(i=0;i<4;i++)printf(message[i]); Hello brave new world! hello5.c 6.14 #include<stdio.h> Argumentyfunkcji {printf(s);printf("\n"); voidwriteln(char*s) char*message[4]={"hello","brave","new","world!"}; }intmain() {inti; } for(i=0;i<4;i=i++)writeln(message[i]); 35

ztym echarzajmujezawszejedenbajt. ZnakiwC(typchar)s dopewnegostopniautozsamianezliczbami(int), 6.15 Strukturanapis w znakokodzie0. Hellon0adok adniej:72101108108111 Napis"Hello"jestwi creprezentowanytak: NapisywCtotabliceznak w.koniecnapisujestsygnalizowanyprzez 6.16 Ulepszamywritelnfunkcjaputs 0 {inti; intputs(char*s) hello6.c externintputchar(intc); }intmain() for(i=0;s[i]!=0;i++)putchar(s[i]); putchar('\n'); {returnputs("hello,isitmeyou'relookingfor?"); returni; } hello7.c(fragment) 6.17 Ulepszamyputswska nikiitablice {char*t; intputs(char*s) }*toznaczaznakwskazywanyprzezt. for(t=s;*t!=0;t++)putchar(*t); putchar('\n'); returnt-s; t-soznaczaodleg o mi dzywska nikamitis. t++oznaczaprzesuni ciewska nikao1znakdoprzodu 36

Rozdzia 7 U ywamyc args1.c #include<stdio.h> 7.1 Argumentyfunkcjimain:argciargv intmain(intargc,char*argv[]) {inti,count=argc-1; printf("%d\n",count); } for(i=1;i<=count;i++) returncount; printf(argv[i]);printf("\n"); 37

7.2 intstrlen1(char*s) strlen1.c D ugo napisuwska nikiip tlafor {char*t; for(t=s;*t;t++) } return(t-s); /*empty*/; 7.3 intstrlen1(char*s) strlen2.c D ugo napisuindeksyip tlawhile {inti=0; } returni; while(s[i]!='\0') i++; 38

7.4 lentest.c #include<stdio.h> Przyk adprogramug wnego externintstrlen1(char*s); intmain(intargc,char*argv[]) {if(argc<2){ }printf("%d\n",strlen1(argv[1])); fprintf(stderr,"usage:%s<string>\n",argv[0]); return0; return1; } 7.5 Razem: $gcc-olentestlentest.cstrlen1.c Kompilacjaprogramuwkilkuplikach Oddzielnie: -rwxr-xr-x $ls-llentest $gcc-clentest.c 1ben zls 5608Apr2610:56lentest $gcc-cstrlen2.c $ls-l*.o -rw-r--r-- $gcc-olentest2strlen2.olentest.o 1ben zls 980Apr2610:57lentest.o -rwxr-xr-x $ls-llentest2 1ben zls 5600Apr2610:57lentest2 596Apr2610:57strlen2.o 39

Makefile 7.6 CC=gccMakele CFLAGS=-Wall lentest:lentest.ostrlen1.o lentest2:lentest.ostrlen2.o orazregu. Powy szyplikmakefilesk adasi zdenicjizmiennych(cc,cflags) $(CC)-olentest2lentest.ostrlen2.o htabihpoleceniai hceli:hzale no cii Regu ymaj sk adnienast puj c : 7.7 $makelentest Jaktodzia a? gcc-wall $makelentest2 lentest.ostrlen1.o -clentest.c-olentest.o gcc-wall -cstrlen1.c-ostrlen1.o gcc-olentest2lentest.ostrlen2.o -cstrlen2.c-ostrlen2.o -olentest $makelentest2 make:`lentest2'isuptodate. makekompilujetylkoteplikikt res nieaktualne,tj.starszeodplik wodkt rychzale. Korzystawtymceluzwyspecykowanychwpliku,orazztzw.regu domy lnych.np.abystworzy plik.ozpliku.cdomy lasi,byskorzysta zregu y $(CC)-c$(CPPFLAGS)$(CFLAGS) 40

7.8 Makefile Bardziejz o onyprzyk ad CC=gcc CFLAGS=-Wall PROGS=args1codescountdatedate1date2date3date4\ lentestlentest2lowerno1no2seven1seven2seven3\ hello1hello2hello3hello4hello5hello6hello7hello8\ lentest:lentest.ostrlen1.o all:$(progs) truewcwhoyes clean:-rm-fcore*.o*~$(progs) lentest2:lentest.ostrlen2.o $(CC)-olentest2lentest.ostrlen2.o PACKAGE=examples-97 ARCHIVE=$(PACKAGE).tar.gz dist:$(archive) CFILES:=*.c $(ARCHIVE):$(DISTFILES) DISTFILES:=Makefile$(CFILES) -rm-rf$(package) mkdir$(package) cp$(distfiles)$(package) $(ARCHIVE):$(DISTFILES) tarzcf$(archive)$(package) tarzcf$(package).tar.gz$(distfiles) -rm-rf$(package) 41

7.9 Wy wietlamydat przekazywaniewska ni- #include<time.h> intmain() {longclock; #include<stdio.h> date1.ck w }date2.c time(&clock); printf("date:%ld\n",clock); return0; #include<stdio.h> #include<time.h> intmain() {longclock; } time(&clock); printf("date:%s\n",ctime(&clock)); return0; 7.10 structtm{ Strukturyprzyk ad /*seectime(3)*/ tm_sec; tm_min; tm_hour; tm_mday; tm_mon; int tm_year; tm_wday; tm_yday; tm_isdst; 42

}; structtmtime1; #include<stdio.h> typedefstructtmtime; #include<time.h> date3.c intmain() {longclock; structtmdate; time(&clock); date=localtime_r(&clock,&date); }date4.c return0; printf("time:%02d:%02d:%02d\n", date.tm_hour,date.tm_min,date.tm_sec); #include<stdio.h> #include<time.h> intmain() {longclock; structtm*date; printf("time:%02d:%02d:%02d\n", time(&clock); date=localtime(&clock); } return0; ); date->tm_hour,date->tm_min,date->tm_sec 43

{inti,result=0; intstrcmp(char*s,char*t) 7.11 Instrukcjabreak for(i=0;s[i] t[i];i++){ if(s[i]<t[i]){ }if(s[i]>t[i]){ result=-1;break; }returnresult; } result=1;break; }7.12 {inti,err,optg,optl,opth; intmain(intargc,char*argv[]) Instrukcjaswitch for(i=1;i<argc;i++) if(argv[i][0]=='-') switch(argv[i][1]) {case'g':optg=1;break; case'l':optl=1;break; case'\0':break; /*...*/ } default:usage(); case'h':/*nobreak!*/ 44

Rozdzia 8 Bibliotekawej cia/wyj cia: stdio #include<stdio.h> 8.1 Programno1 {for(;;) voidmain() }8.2{fputc('n',stdout);fputc('\n',stdout);} #include<stdio.h> Programno2 {for(;;) voidmain() } {puts("n");} 45

8.3 Funkcja fopen(s;t) Funkcjestdio fclose(f) fgetc(f) Wynik FILE* int NULL! Otwieraplikonazwieswtrybiet. Zamykaplikf. Czytaznakzplikuf. Przeznaczenie fputc(c;f) fputs(s;f) fgets(b;n;f) jsj cb NULLCzytalini zplikufdobuforabroz- EOF Piszestringsnaplikf. Ditto,dopisuje\n Piszeznakcnaplikf. fread(b;k;n;f) fwrite(b;k;n;f) fprintf(f;s;:::) <n <0 Wypisujenaplikfargumenty(...) Czytazplikunrekord wrozmiaruk. Piszetosamo. miarun. 8.4 feof(f) Funkcjafopen int Czykoniecf? wformacies. "r"czytanie;wska nikpozycjiumieszczanyjestnapocz tkupliku FILE*fopen(char*path,char*mode); Argumentmodespecykujetrybotwarciapliku: Otwieraplikonazwiepath "w+"czytanieipisanie,resztajakwy ej "r+"czytanieipisanie;wska nikpozycjijakwy ej. "a"dopisywanie;wska nikpozycjiumieszczanynako cupliku "w"pisanie;plikjestzamazywanyje liistnieje,tworzonywpp. "a+"czytanieipisanie;wska nikpozycjijakwy ej. 8.5 DajewynikNULLwrazieb du. size_tfread(void*ptr,size_tsize,size_tn,file*stream); Czytazplikustreamdonrekord wrozmiarusize,umieszczaj cjew Funkcjefreadifwrite (aniebajt w!) buforzewskazywanymprzezptr.dajewwynikuilo odczytanychrekord w wskazywanymprzezptr.dajewwynikuilo zapisanychrekord w Piszedoplikustreamnrekord wrozmiarusizeumieszczonychwbuforze size_tfwrite(void*ptr,size_tsize,size_tn,file*stream); 46

#include<stdio.h> 8.6 Programyes {char*s; voidmain(intargc,char*argv[]) switch(argc){ case1: default: case2: s="y";break; fprintf(stderr, exit(0);"usage:%s[text]\n",argv[0]); s=argv[1];break; }8.7 }for(;;) {puts(s);} voidmain(intargc,char*argv[]) #include<stdio.h> Programcount {intc,count=0; /*Sprawd parametrywywo aniaprogramu.*/ if(argc!=2){ FILE*fp; fprintf(stderr,"usage:%sfile\n",*argv); /*Otw rzplikdoczytania.sygnalizujb dje lisi nieuda o(np.pliknie } exit(1); istnieje).*/ if((fp=fopen(argv[1],"r"))==null){ } perror(argv[1]); exit(1); 47

/*Wypiszwynik.*/ while((c=getc(fp))!=eof)count++; /*Czytajiliczkolejneznakia doko capliku.*/ /*Zamknijplik.*/ printf("%d\n",count); }8.8 fclose(fp); exit(0); #include<stdio.h> Programappend-by-char { voidmain(intargc,char*argv[]) /*Sprawd parametrywywo aniaprogramu.*/ intc; FILE*from,*to; if(argc!=3){ } exit(1); fprintf(stderr, "Usage:%sfrom-fileto-file\n",*argv); /*Otw rzplikfromdoczytania.sygnalizujb dje lisi nieuda o(np. pliknieistnieje).*/ if((from=fopen(argv[1],"r"))==null){ /*Otw rzpliktododopisywania.plikzostanieutworzonyje linieistnieje. } perror(argv[1]);exit(1); */if((to=fopen(argv[2],"a"))==null){ perror(argv[2]); /*Czytajkolejneznakia doko caplikufromizapisujnaplikto.*/ } exit(1); 48

/*Zamknijpliki.*/ while((c=getc(from))!=eof) fclose(from); putc(c,to); }8.9 fclose(to); exit(0); #include<stdio.h> Programappend-by-line { voidmain(intargc,char*argv[]) /*Sprawd parametrywywo aniaprogramu.*/ FILE*from,*to; charline[bufsiz]; if(argc!=3){ } exit(1); fprintf(stderr, "Usage:%sfrom-fileto-file\n",*argv); /*Otw rzplikfromdoczytania.sygnalizujb dje lisi nieuda o(np. pliknieistnieje).*/ if((from=fopen(argv[1],"r"))==null){ /*Otw rzpliktododopisywania.plikzostanieutworzonyje linieistnieje. } perror(argv[1]);exit(1); */if((to=fopen(argv[2],"a"))==null){ perror(argv[2]); /*Czytajkolejneliniea doko caplikufromizapisujnaplikto.*/ } exit(1); while(fgets(line,bufsiz,from)!=null) fputs(line,to); 49

/*Zamknijpliki.*/ }8.10 fclose(from); fclose(to); exit(0); #include<stdio.h> Programappend-by-buffer { voidmain(intargc,char*argv[]) FILE*from,*to; /*Sprawd parametrywywo aniaprogramu.*/ charline[bufsiz]; intn; if(argc!=3){ } exit(1); fprintf(stderr, "Usage:%sfrom-fileto-file\n",*argv); /*Otw rzplikfromdoczytania.sygnalizujb dje lisi nieuda o(np. pliknieistnieje).*/ if((from=fopen(argv[1],"r"))==null){ /*Otw rzpliktododopisywania.plikzostanieutworzonyje linieistnieje. } perror(argv[1]);exit(1); */if((to=fopen(argv[2],"a"))==null){ perror(argv[2]); /*Czytajkolejneporcjea doko caplikufromizapisujnaplikto.*/ } exit(1); /*Zamknijpliki.*/ while((n=fread(buf,sizeof(char),bufsiz,from))>0) fwrite(buf,sizeof(char),n,to); 50

}8.11 fclose(from); fclose(to); exit(0); #include<stdio.h> #include<utmp.h> Programwho intmain() {FILE*fp; structutmpu; if((fp=fopen(utmp_file,"r"))==null){ }while(fread(&u,sizeof(u),1,fp)){ perror(utmp_file);return1; if((u.ut_type!=user_process) }fclose(fp); print_utmp_entry(&u); continue;!u.ut_name[0]) }8.12 return0; structutmp{ Strukturautmp charut_user[8]; charut_id[4]; charut_line[12]; shortut_pid; }; shortut_type; structexit_statusut_exit; 8.13 Funkcjaprint_utmp_entry time_tut_time; { voidprint_utmp_entry(structutmp*u) 51

printf("%-8.8s",u->ut_user); } printf("%-8.8s",u->ut_line); printf("%-12.12s\n", ctime(&(u->ut_time))+4); 52

Rozdzia 9 Systemowefunkcje wej cia/wyj cia #include<fcntl.h> 9.1 creat1.c Funkcjecreatiunlink {creat("/tmp/temp",0644); voidmain() }unlink1.c #include<unistd.h> {unlink("/tmp/temp"); voidmain() }~/Zajecia/Unix/C>./creat1 ~/Zajecia/Unix/C>ls-l/tmp/temp -rw-r--r-- ~/Zajecia/Unix/C>./unlink ~/Zajecia/Unix/C>ls-l/tmp/temp -rw-r--r-- 1ben 1ben zls zls 0Nov116:39/tmp/temp ~/Zajecia/Unix/C>./unlink1 ~/Zajecia/Unix/C>ls-l/tmp/temp ls:/tmp/temp:nosuchfileordirectory0nov116:39/tmp/temp 53

9.2 #include<fcntl.h> creat1-bad.c Typowyb dprzyu yciucreat {creat("/tmp/temp",644);/*b d,mialobyc0644*/ voidmain() } ~/Zajecia/Unix/C>./creat1-bad ~/Zajecia/Unix/C>ls-l/tmp/temp --w----r-t 9.3 JakPoprawnieu ywa creat 1ben zls 0Nov116:45/tmp/temp #include<fcntl.h>/*creat*/ #include<stdio.h>/*perror*/ creat.c #include<unistd.h>/*close*/ {intfd; intmain(intargc,char**argv) fd=creat(argv[1],0644); if(argc<2)return1; if(-1==fd){perror("creat");return2;} } if(-1==close(fd)){perror("close");return3;} return0; 9.4 ~/Zajecia/Unix/C>./creat/tmp/temp ~/Zajecia/Unix/C>ls-l/tmp/temp Poprawneib dnedzia aniecreat -rw-r--r-- 1ben zls 54 0Nov116:48/tmp/temp

~/Zajecia/Unix/C>./creat. creat:isadirectory ~/Zajecia/Unix/C>./creat/etc/temp creat:permissiondenied ~/Zajecia/Unix/C>./creat./creat #include<stdio.h> creat:textfilebusy #include<unistd.h> unlink.c {if(argc<2)return1; intmain(intargc,char**argv) } if(-1==unlink(argv[1])){perror("unlink");return2;} return0; #include<fcntl.h> intopen(char*path,intflags); 9.5 Funkcjaopen intcreat(char*path,mode_tmode); intopen(char*path,intflags,mode_tmode); wanywp niejszychoperacjach) j j dn zwarto cio_rdonly,o_wronly,o_rdwr,ewentualniepo czon Funkcjaopenotwieraplikopodanejnazwieidostarczadeskryptor(u y- bitowo(operatorem )znast puj cymiagami: Parametrflagsspecykuje adanytrybdost pudoplikumo eprzy- O_EXCLu ytezo_creatpowodujeb dje liplikistnieje O_TRUNCplikzostaniezamazany(skr conydozera)je liju istnieje O_CREATplikzostaniestworzonyje linieistnieje. O_APPENDwska nikpozycjizostanieumieszczonynako cupliku 55

O_NDELAYwszystkieoperacjenaplikub d wykonywanebezczekania plikowi. Parametrmodem wijakieprawadost pumaj by nadanetworzonemu razieb du.powinni myzawszesprawdza czytonienast pi o,np openicreat,podobniejakwi kszo funkcjisystemowychzwraca-1w creatjestr wnowa neopenzagamio_creat O_WRONLY O_TRUNC }9.6 if((from=open(argv[1],o_rdonly))<0){ perror(argv[1]); exit(1); ssize_tread(intfd,void*buf,size_tn); #include<unistd.h> Funkcjereadiwrite umieszczaj cjewbuforzewskazywanymprzezbuf.dajewwynikuilo ssize_twrite(intfd,void*buf,size_tn); odczytanychbajt w.je liliczbatajestmniejszaodn,oznaczatozregu y, edotartli mydoko capliku. Funkcjareadczytazplikureprezentowanegoprzezfddonbajt w, Je liliczbatajestmniejszaodn,oznaczatob d. buforawskazywanegoprzezbuf.dajewwynikuilo zapisanychbajt w. Wobuwypadkachfdmusiby deskryptoremotrzymanymodfunkcji Funkcjawritepiszedoplikureprezentowanegoprzezfddonbajt wz 9.7 open(lubpokrewnej)albojednymzestandardowychdeskryptor w:0,1,2 intfstat(intfd,structstat*buf); intstat(constchar*path,structstat*buf); Funkcjastatijejkrewniacy intlstat(constchar*path,structstat*buf); dlaplikuopodanejnazwie(rozwijaj cdowiazaniasymboliczne),za fstat dlareprezentowanegoprzezdeskryptor. Powy szefunkcjedostarczaj informacjiopodanympliku.statczynito wanymprzezniepliku. niemsymbolicznym,tozwracainformacjeotymdowi zaniuanieowskazy- Wszystkietrzyumieszczaj informacjewstrukturzestat Funkcjalstatdzia ajakstatztym, eje lipodanyplikjestdowi za- 56

#include<sys/stat.h> 9.8 Strukturastat {dev_t structstat ino_t st_dev; st_ino; /*device*/ uid_t umode_t nlink_t st_mode; st_nlink; /*inode*/ gid_t dev_t st_uid; st_gid; st_rdev; /*devicetype*/ /*linkcount*/ off_t unsignedlongst_blksize;/*blocksize*/ unsignedlongst_blocks;/*sizeinblocks*/ st_size; st_atime; /*sizeinbytes*/ }; time_t st_mtime; st_ctime; #include<sys/stat.h> times.c 9.9 Programtimes #include<unistd.h> #include<stdio.h> {structstatinfo; #include<time.h> intmain(intargc,char**argv) printf("lastaccessed:%s", if(argc<2)return1; if(stat(argv[1],&info)<0) printf("lastmodified:%s", {perror(argv[1]);return2;} ctime(&info.st_atime)); } return0; ctime(&info.st_mtime)); 57

~/Zajecia/Unix/C>./times/etc/passwd Lastaccessed:SatNov119:05:091997 Lastmodified:ThuOct3015:46:351997 #include<fcntl.h> io-append.c 9.10 Programio-append #include<unistd.h> { voidmain(intargc,char**argv) #include<stdio.h>/*perror*/ intn; intfrom,to; ka dykawa ekkomunikatumusimywypisa oddzielnie*/ /*Sprawd parametrywywo aniaprogramu.poniewa nieu ywamyprintf, charbuf[1024]; if(argc!=3){ write(2,"usage:",7); }/*Otw rzplikfromdoczytania.sygnalizujb dje lisi nieuda o(np. exit(1); write(2,*argv,strlen(*argv)); write(2,"from-fileto-file\n",19); if((from=open(argv[1],o_rdonly))<0){ pliknieistnieje).*/ }/*Otw rzpliktododopisywania.plikzostanieutworzonyzprawamidost pu644(-rw-rr)je linieistnieje.*/ perror(argv[1]); exit(1); if((to=open(argv[2], perror(argv[2]); exit(1); 0644))<0){ O_WRONLY O_CREAT O_APPEND, } 58

while((n=read(from,buf,sizeof(buf)))>0) Zawszepiszemytyleileprzeczytali myraczejanie1024bajty*/ /*Czytajkolejneporcjea doko caplikufromizapisujnaplikto. /*Zamknijpliki.*/ write(to,buf,n); close(from); close(to); exit(0); }9.11 io-who.c #include<stdio.h> Programio-who #include<utmp.h> #include<fcntl.h> #include<unistd.h> voidprint_utmp_entry(structutmp*u)/*...*/ intmain() {intfd; structutmpu; }while(read(fd,&u,sizeof(u))==sizeof(u)){ if((fd=open(utmp_file,o_rdonly))==-1){ perror(utmp_file);return1; if((u.ut_type!=user_process) }close(fd);return0; print_utmp_entry(&u); continue;!u.ut_name[0]) } 59

Rozdzia 10 Zaawansowanefunkcje wej cia/wyj cia takiejak: 10.1 Opr czzwyk ychplik w,wsystemiunixs jeszczetzw.plikispecjalne, Plikispecjalne urz dzenia czanazwane katalogi Generalniemo najeotwiera funkcj open,czyta ipisa przypomocyfunkcjireadiwrite(cho plikispecjalnemaj tupewn specyk ).Niemozna ichnatomiasttworzy przypomocycreat(s u ydotegoosobnafunkcja mknod Katalognajlepiejczyta przypomocyfunkcjireaddir,pootwarciugoprzez opendir. 10.2 Czytaniekatalog w DIR*opendir(constchar*name); #include<sys/types.h> structdirent*readdir(dir*dir); #include<dirent.h> Reszt informacjinajlepiejuzyska zapomoc stat. intclosedir(dir*dir); Strukturadirentmawzasadzietylkojednointeresuj cepole:d_name. 60

10.3 readdir.c #include<sys/types.h> Przyk ad #include<dirent.h> #include<stdio.h> #include<sys/stat.h> intmain() { DIR*dp; structdirent*dir; structstatsbuf; }while((dir=readdir(dp))!=null){ if((dp=opendir("."))==null){ return1; fprintf(stderr,"cannotopendirectory.\n"); }closedir(dp); stat(dir->d_name,&sbuf); printf("%07o%20s%ld\n", sbuf.st_mode,dir->d_name,sbuf.st_size); } return0; 0040755 [12:31:38]ben@kawa:~/Zajecia/Unix/C>./readdir head true.c56 no2.c85..1024.3072 10.4 0100644Sprytniejszydost pdokatalogu:scandir Makefile856 args1.c222 intscandir(constchar*dir,structdirent***namelist, int(*selector)(structdirent*), int(*cmp)(constvoid*,constvoid*)) 61

zadanegoprzezfunkcj cmp zaakceptowaneprzezselector,wynikjestposortowanywed ugporz dku Je liinteresujenasporz dekalfabetyczny,mo nau y funkcjialphasort: Funkcjataprzegl dazawarto katalogudir,wybieraj ctylkopozycje staticintone(structdirent*unused){return1;} intalphasort(constvoid*a,constvoid*b) scandir.c intmain(void) {structdirent**eps; if(n>=0){ intn; n=scandir("./",&eps,one,alphasort); intcnt; else } for(cnt=0;cnt<n;++cnt) perror("couldn'topenthedirectory"); puts(eps[cnt]->d_name); } return0; 10.5 #include<sys/time.h> #include<sys/types.h> Funkcjaselect fd_set*exceptfds,structtimeval*timeout); #include<unistd.h> intselect(intn,fd_set*readfds,fd_set*writefds, FD_CLR(intfd,fd_set*set); FD_ISSET(intfd,fd_set*set); FD_SET(intfd,fd_set*set); zmienistan(lubup yniepodanyczas). Funkcjaselectobserwujepodanedeskryptoryiwraca,gdykt ry znich FD_ZERO(fd_set*set); 62

10.6 #include<stdio.h> select1.c Przyk adu yciaselect #include<sys/time.h> #include<sys/types.h> #include<unistd.h> intmain(void) { fd_setrfds; structtimevaltv; intretval; /*Obserwujstdin(fd0)*/ FD_ZERO(&rfds); FD_SET(0,&rfds); /*Czekajnajwy ej5sekund*/ tv.tv_sec=5; tv.tv_usec=0; if(retval) retval=select(1,&rfds,null,null,&tv); elseprintf("przez5sekundnicnieby o.\n"); /*FD_ISSET(0,&rfds)>0*/ printf("co jestnawej ciu!\n"); } exit(0); 10.7 /dev/tty,teoretyczniemo nakomunikowa si znimzapo rednictwem Poniewa terminaljesturz dzeniem,dost pnymzapo rednictwempliku Komunikacjazterminalem dwaproblemy,kt recz stostaj przedpisz cymiprogramypodunixem: rzysta zgotowychbibliotek,np.ncurses.wtymmiejscuom wimytylko read,writeiioctl.jesttojednaknatyleskomplikowane, elepiejsko- Jakwczytywa zterminalabezporednionaci ni teklawisze? Jakwczytywa bezecha(np.has o)? 63

10.8 Popierwsze:wartosi przekona, edeskryptorzkt regochcemy Jakwczytywa zterminalabezporednionaciczyta (czylizwyklestandardowewej cie)jestfaktyczniezwi zanyz ni teklawisze? terminalem.mo nategodokona przypomocyfunkcjiisatty: Podrugie:wej ciezterminalajestbuforowane.wtzw.kanonicznymtrybiepracyterminala,zawarto buforajestprzekazywanapo if(isatty(0))......musimyustawi rozmiarbuforana1 kazywanapowype nieniubufora,wi c... naci ni ciuenter.je liwy czymytrybkanoniczny,b dzieonaprze- #include<stdlib.h> #include<stdio.h> keypress.c #include<termios.h> #include<string.h> staticstructtermiosstored; voidset_keypress(void) { structtermiosnew; tcgetattr(0,&stored); memcpy(&new,&stored,sizeof(structtermios)); /*wy cztrybkanonicznyiustawrozmiarbuforana1*/ new.c_cc[vtime]=0; new.c_lflag&=(~icanon); tcsetattr(0,tcsanow,&new); return; new.c_cc[vmin]=1; } 64

voidreset_keypress(void) {}voidmain() tcsetattr(0,tcsanow,&stored); return; {intc; set_keypress(); }Korzystali mytuzfunkcji printf("\nnacisn e :%c\n",c); c=getchar(); printf("naci nijco :"); inttcsetattr(intfd,intactions,structtermios*tp); inttcgetattr(intfd,structtermios*tp); aledu opro cieju y funkcjibibliotecznejgetpass: 10.9 Mo naoczywi ciewy czy echoprzypomocytcsetattr(albowr czioctl), Jakwczytywa bezecha(np.has o)? #include<stdio.h> getpass.c voidmain() {printf("%s\n",getpass("password:")); char*getpass(constchar*prompt); } Password: tajne ben@kawa:~/zajecia/unix/c>./getpass cjiprintf). (Oczywi ciewfaktycznychzastosowaniachniemasensuu ywa tufunk- 65

Rozdzia 11 procesy Programowaniewsp bie ne ZprogramuwCistniej (conajmniej)trzymetodydost pudozmiennych 11.1 rodowiska: rodowisko Zapomoc trzeciegoargumentufunkcjimain: Zapomoc zmiennejenviron: intmain(intargc,char*argv[],char*envp[]) Zapomoc funkcjigetenv: externchar**environ; #include<stdio.h> showenv1.char*getenv(constchar*name); {inti; voidmain(intargc,char*argv[],char*envp[]) } for(i=0;envp[i]!=null;i++) printf("%s\n",envp[i]); 66

#include<stdio.h> externchar**environ; showenv2.c voidmain() {inti; }showenv3.c for(i=0;environ[i]!=null;i++) printf("%s\n",environ[i]); #include<stdio.h> {inti; #include<stdlib.h> voidmain(intargc,char*argv[],char*envp[]) if(argc<2){ }else{ for(i=0;envp[i]!=null;i++) printf("%s\n",getenv(argv[1])); printf("%s\n",envp[i]); }} 11.2#include<unistd.h> Identykatoryproces w pid_tgetpid(void); pid_tgetppid(void); 67

#include<unistd.h> #include<stdio.h> showpid.c {printf("m jpid=%d\n",getpid()); voidmain() } printf("pidojca=%d\n",getppid()); 11.3 #include<unistd.h> pid_tfork(void); Funkcjafork r ni cejsi odniegotylkowarto ciamipidippidorazwarto ci dostarczon przezfork.ojcuforkdostarczapidsyna,synowiza 0. Je listworzenienowegoprocesusi zjakiego powodu(brakpami ci,za Wywo aniefunkcjiforkpowodujestworzeniekopii(potomka)procesu, du oaktywnychproces w)niepowiod o,forkdostarcza-1. #include<stdio.h> #include<stdlib.h> proc_fork.c #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> intmain() {pid_tpid; printf("myprocessid=%d\n",getpid()); switch(pid=fork()){ case-1: exit(1); fprintf(stderr,"errorinfork\n"); 68

case0: printf("syn:valuereturnedbyfork()=%d\n",pid); exit(0); printf("syn:myprocessid=%d\n",getpid()); default: printf("ojciec:valuereturnedbyfork()=%d\n",pid); if(wait(0)==-1){ printf("ojciec:myprocessid=%d\n",getpid()); }exit(0); exit(1); fprintf(stderr,"errorinwait\n"); }}/*switch*/ 11.4 #include<unistd.h> Rodzinafunkcjiexec intexeclp(constchar*file,constchar*arg,...); externchar**environ; intexecl(constchar*path,constchar*arg,...); intexecle(constchar*path,constchar*arg,..., intexecvp(constchar*file,char*constargv[]); intexecv(constchar*path,char*constargv[]); intexect(constchar*path,char*constargv[]); char*constenvp[]); proc_exec.c case0: printf("syn:valuereturnedbyfork()=%d\n",pid); execlp("ps","ps",0); printf("syn:myprocessid=%d\n",getpid()); default: exit(1); fprintf(stderr,"errorinexeclp\n"); printf("ojciec:myprocessid=%d\n",getpid()); 69

[13:56:47]ben@kawa:~/Zajecia/Unix/C>./proc_exec printf("ojciec:valuereturnedbyfork()=%d\n",pid); Ojciec:Myprocessid=2224 Syn:Valuereturnedbyfork()=0 Syn:Myprocessid=2225 Ojciec:Valuereturnedbyfork()=2225 13950?S 2224?S 2225?R PIDTTYSTATTIMECOMMAND 0:00./proc_exec 0:00ps 11.5 Funkcjapipe 0:01-bash #include<unistd.h> ko c w.deskryptorfd[0]s u ydoczytania,za fd[1]dopisania. Funkcjapipetworzyiotwiera czeidostarczadeskryptor wdojego intpipe(intfd[2]); stywanyjestprzezinterpreterpolece dozrealizowaniapotok w,np.przy wykonywaniu czaokt rychtumowatodok adnietenmechanizm,kt rywykorzy- interpreterpolece tworzydw chsyn w(fork),tworzymi dzynimi cze (pipe)ika eimwykonywa odpowiednieprogramy(exec). ls sort #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<sys/types.h> void read_from_pipe(intfile) /*Readcharactersfromthepipeandechothemtostdout.*/ {FILE*stream; while((c=fgetc(stream))!=eof) intc; stream=fdopen(file,"r"); 70