Documente Academic
Documente Profesional
Documente Cultură
Retele de Calculatoare - Lab1
Retele de Calculatoare - Lab1
2016
Reteledecalculatoare
Laborator1
Prezentareatematiciigeneralealaboratoarelorsiasistemuluideevaluare
Recapitularebash.Comenziuzuale
RecapitulareprogramareCsubLinux
Generalitati
Rutinedesistempentrumanipulareafisierelor
Manipulareafisierelorprinfunctiidelibrarie
Lucrulcudirectoare
Managementulmemoriei
Exercitii
1.Recapitularebash.Comenziuzuale
Oposibiladefinitiepentruunshellarficeadeinterpretordecomenziceasiguraointerfataintreutilizatorsisistemuldeoperare.Bash
(Bourneagainshell)esteunuldincelemaiutilizateshellurideconsolaUNIXlamomentulcurentsitotodatacelimplicitinmajoritatea
distributiilordeLinuxexistente.
Comenziledelanivelulshelluluipotfiinterne(implementateincadrulshellului)sauexterne(reprezintasimpleprogrameconsola).Casi
primelesiceledinadouacategoriepotfirulateinmodnormalprinsimplaapelareacomenzii(cuoptiunisiparametridupacaz),fiind
pozitionatiinoricedirectoralsistemului,chiardacanusuntpropriishellului.Apeluldinoricedirectoresteposibildeoareceshellulvacauta
comandaindirectoarelespecificateprinintermediulvariabileidesistemPATH,iarinmoduzual,dupainstalareaceastavariabilavainclude
sidirectoarelececontinmajoritateacomenzilor.ContinutulvariabileiPATHpoateficonsultat(caoricealtavariabiladefapt)prin
intermediulapeluluiecho$PATH.Evident,incazulincarevariabilaPATHnucontinecaleaspredirectorulundeseregasestecomanda,
aceastanuvaputeafiapelatadecatfolosindcaleacompletaplecanddelaradacina/,sauocalerelativaladirectorulcurent.saulacel
parinte..
AducemamintecuacestprilejdirectoareleceseregasescincadruldistributiilorstandarddeLinux:
/directorulradacina
bindiverseexecutabilenecesaresistemului,aiciaflandusedeexemplushellurilesicomenzileexterne
bootfisierenecesarelaincarcareasistemului,printrecaresiimagineabinaraakerneluluisistemuluideoperare
devfisiereutilizatepentruinterfatareacudispoztivelesistemului(fizicesilogice)
etcfisieredeconfigurarealesistemuluicumarfi/etc/passwdinformatiidespreutilizatori,/etc/groupinformatiidespregrupurilede
utilizatori,/etc/servicesinformatiidespreserviciilederetea(indicativelenumericealeporturilor),/etc/protocolsprotocoalelederetea
suportate
homesubdirectoareleutilizatorilor
liblibrariipartajabilecesuntutilizatedesistemsaudecatrediverseaplicatii
mntsistemedefisieretemporaratasatearboreluidedirectoarecurent(montateutilizandcomandamount)invedereaaccesarii,cum
arfideexemplucdromulsaupartitiiledewindows
procintrarivirtualecorespunzatoareproceselordinsistemcuinformatiidespreacesteasidatedespreresurseleutilizate(CPU,RAM)
sbinexecutabiledeadministraredestinateutilizariidecatreroot
tmpdirectorpentrudateletemporare
usraplicatiidestinateutilizatorilorsistemului
usr/binexecutabilealeaplicatiilor
usr/docdocumentatiepentruaplicatii
usr/includefisiereheaderpentrudezvoltareadeprogrameC/C++
usr/liblibrariiutilizatedeaplicatii
usr/localaplicatiiceinmodnormalsuntdestinatedoarutilizariipemasinalocala(caexempludirectorulusrpoatefiplasatfizicpealta
masinasipartajatdemaimultestatiidelucruinacestcazaplicatiiledepemasinacurentavorfiinstalateinusr/local)
usr/sbinalteexecutabiledecatceledinsbinpentruadministrareasistemului
usr/srcsurseleaplicatiilor
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
1/10
28.03.2016
Reteledecalculatoare
varfisierededimensiunevariabilacesemodificafrecvent(cumarfiloguriledeexemplu)
Informatiidebazadepreocomanda,optiunilesiparametriiei,sepotobtineingeneralprinrulareacomenziicuoptiuneahelp,suportata
inmajoritateacazurilor.Informatiidetaliatedesprecomandapotfiobtinuteprinapelulmancomandasauinfocomanda.
1.1.Comenzipentruoperatiiasuprasistemuluidefisiere
lsListeazafisiereledintrundirector,implicitcelcurent.Folosindoptiunealintrariledesprefisieresuntafisateinformatdetaliat.
Optiuneaaarecarezultatsiafisareafisierelorascunse(alcarornumeincepecu.)
stat[optiuni][cale]Afiseazadiverseinformatiiinfunctiedeoptiuniledatedesprefisierul/directorulaflatincaleaintrodusaca
parametru
cp[sursa][destinatie]Copiefisierulsursainlocatiadestinatie.Comandapoateaveasirolderedenumireincazurileundecalea
destinatieesteterminatacu(sauchiarreprezinta)unnumedefisier.Comandaesteutilizatasiincopiereadirectoarelor,cazincare
estefolositaingeneraloptiunearcearecaefectcopierearecursivasiasubdirectoarelorincluse.
mv[sursa][destinatie]Mutasursaindestinatie.Arepracticacelasiefectcasicp,cudeosebireacasursaestestearsaulterior
operatieidemutare
rm[cale]Stergefisierulspecificatincale.Pentrucaapelulcomenziisanunecesiteoconfirmareaditionalaseutilizeazaoptiuneaf
(force).Pentrustergereadirectoarelorsefolosesteoptiunearpentrucastergereasaserealizezerecursivsilaniveldesubdirectoare.
cd[cale]Schimbareacaiicurente
mkdir[cale]Creareadirectoruluispecificatincale
Pentrumaimulteinformatiiasupracomenzilorenumerateconsultatimanualul.
1.2.Comenzipentruoperatiicufisieretext
cat[fisier]Apelatainacestmodafiseazacontinutulintreguluifisierpeecran(destinatiaprincipalaacomenziiestedefaptdea
concatenafisiere)
less[fisier]Afiseazacontinutulfisieruluipaginacupagina,permitandactiuniavansatecumarfideexemplucautareaincadrul
fisierului.
head[fisier]Afiseazaprimeleliniidincadrulfisierului(implicit10,numarulacestorasepoatespecificaprinoptiuneanex:n9
pentru9linii)
tail[fisier]Similarcuheadpentruultimeleliniidincadrulfisierului
grep[expresieregulata][fisier]Cautasiafiseazaliniiledincadrulfisieruluicarerespectaexpresiaregulata.
cut[optiuni][fisier]Extrageanumitecampuridinliniileunuifisierpebazaoptiunilorselectate.
diff[fisier1][fisier2]Comparafisierelesievidentiazadiferentele
wc[fisier](wordcount)Afiseazanumaruldelinii,cuvintesicaracteredintrunfisier
Pentrumaimulteinformatiiasupracomenzilorenumerateconsultatimanualul.
Pentrueditareafisierelortextsuntdisponibilelanivelulshelluluidiverseeditoaremaisimplesiusordeutilizatcumarfinano,mceditsau
maicomplexecaemacssauvim.
1.3.Drepturideacces
Drepturiledeaccesasupraunuifisiersuntvizibileinurmaapeluluicomenziilscuoptiuneal.Acesteapotfiobservateinprimulcamp
dintrointrarecorespunzatoareunuifisier.Acestcampcecontine10caractereesteformatdinpatrusubcampuri.Primulsubcampeste
formatdintrunsingurcaracterceidentificatipuldefisier(''fisiernormal,'d'director,'p'pipecunume,etc).Urmatoarelesubcampuri
identificadrepturiledeaccesasuprafisierului.Fiecaredintresubcampurileceindicadrepturilesuntformatedincatetreicaracterecepotfi
''incazcanuexistaunanumitdrept,saurespectivinordinedupasemnificatie:'r'existadreptdecitire,'w'existadreptdescrieresi'x'
existadreptdeexecutie.Unsubcampcearindicadecidrepturilecompletearfi'rwx'.Primuldintresubcampurilededrepturiesteasociat
proprietaruluifisierului,urmatorulgrupuluidecareapartineacesta,siultimulrestuluideutilizatori.Astfelunsetdedrepturideaccesde
citire,scrieresiexecutiepentruproprietarulunuifisierobisnuit,sidoardecitireinrestararatainfelulurmator:rwxrr.
Incazuldirectoarelor,dreptuldeexecutiesereferaladreptuldeaschimbacaleacurentaspredirectorulrespectivsideaaccesaefectiv
continutulacestuia,nudealistacontinutulacestuia(acestafiinddreptuldecitire).Candpentruundirector,inloculdreptuluideexecutie
'x',seintalneste't',inseamnacarespectivuldirectorareunasanumitbitstickysetat.Aceastasemnificafaptulcastergereasau
modificareafisierelordincadrulaceluidirectorpotfiefectuatedoardecatreproprietariiacestora.
Altavaloarecepoatefiintalnitainloculdreptuluiobisnuitdeexecutie'x',este's',ceindica,dupalocalizareainsubcampuldedrepturi,
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
2/10
28.03.2016
Reteledecalculatoare
faptulcaunfisieraresetatunbitSUID(SetUserID)sauunbitSGID(SetGroupID).Acestbitaratafaptulcaexecutiafisieruluivafi
realizatadeoricinecupermisiunileproprietarului,respectivgrupuluidecareapartine.Utilizareaprincipalaaacestuimecanismestedea
permitealtorutilizatorisaexecuteocomandacenecesitadrepturideroot.
Modificareadrepturilordeaccessepoaterealizaprinintermediulcomenziichmod[categorieutilizatori][+=][drepturi][cale].Categoria
utilizatoriaratacarorutilizatori(subcampdincampuldrepturilor)liseaplicamodificareasipoatefi'u'proprietar,'g'grup,'o'ceilalti
sau'a'toatecategoriile.'+',''sau'='indicaadaugarea,eliminarea,sausetareadirectaaunordrepturifatade,saurespectivinlocul
celorexistentedeja.Drepturilesuntspecificateprincaractereleasociatespecificatedejamaisus('r','w','x',etc).Urmatorulargument
reprezintacaleasprefisierulsaudirectorulasupracaruiaserealizeazamodificareadrepturilor.Comandachmodpoatefiapelatasiutilizand
valorioctalespecificatedirectpentrusetareadrepturilorpentruceletreicategoriideutilizatori.Pentrumaimulteinformatii,consultati
manualul.
1.4.Redirectareaintrarilorsiiesirilor
Dizpozitivilelogicedeintrare/iesiresunturmatoarele:intrareastandardstdin,deundesecitescdateledeintrare,avandasociataimplicit
tastaturaiesireastandardstdout,undesuntafisatedateledeiesire,avandasociatimplicitterminalulsiiesireadeeroarestandard
stderr,undesuntafisateerorile,avandasociatimplicitdeasemeniterminalul.
Redirectionareaintrarilorsiiesirilorsepoatefacelanivelulshelluluiprinintermediulunoroperatorideredirectare.Astfel,redirectarea
intrariiserealizeazaprinintermediuloperatorului'<'.Spreexemplu,[program]<[fisierin],vapreluadateledeintrarepentruprogram
dinfisierin,chiardacainmodnormalacesteaarfipreluatedelatastatura.Redirectareaiesiriisefaceprinintermediuloperatorului'>'.
Extinzandexemplulanterior,[program]<[fisierin]>[fisierout],pelangaredirectareaintrarii,vascriedateledeiesireinfisierout,inloc
dealeafisalanivelulterminalului.Dacapentruredirectareaiesiriisefolosesteoperatorul'>>',datelevorfiadaugatelasfarsitulnoii
destinatiideiesire,faraasuprascriefisierul.Redirectareaiesiriideeroaresefaceprinoperatorul'2>'.
Redirectareaiesiriiuneicomenzi,caintrarepentruoaltacomanda,sepoatefaceintrunsingurpasprinutilizareamecanismuluipipe,
prininlantuireacomenzilor,separatedeoperatorul'|'.Spreexemplu,dacaneamaflaintrundirectorcecontinefoartemultefisiere,am
puteaafisacontinutulacestuia,treptat,utilizandls|less.
2.ProgramareCsubLinux.Generalitati
CompilareauneisurseCsubLinuxsevarealizautilizandgcc(incazuluneisurseC++compilatorulesteg++).Apelareagccpasandca
argumentunfisierCfaraoaltaoptiune,deexemplu:
gccfile.c
vaproduce(incazulincarenusuntintalniteerori)unexecutabilcunumeleimplicita.outplasatindirectorulcurent,inurmacompilariisi
linkariifisieruluiinitial.
Pentruaspecificaunnumepentrufisieruloutputsefolosesteoptiuneaourmatadeacestnume.Exemplu:
gccfile.cooutexe
Simplacompilarepentruobtinereaunuifisierobiect(faralinkare)dintrosursaC,sepoaterealizaadaugandoptiuneac:
gcccfile.c
Rezultatulvafiunfisierobiectnumitfile.o.Acestapoatetreceprinprocesuldelinkingulteriorpasandulcaargumentunuialtapelgcc.
Inmodimplicit,pentruaincludeheaderelespecificateinsurselecompilate,gccvacautaindirectorulcurentsiindirectoarelececontin
headerelelibrariilorstandard.DacaestenecesaraincludereadefisiereheaderdinaltasursasevafolosioptiuneaIurmatadecalea
respectiva:
gccI./custom/includefile.cooutexe
Pentrulinkareauneilibrarii(biblioteca),invedereaobtineriiexecutabiluluifinalsevafolosioptiunealurmataimediatdeparteadin
numelelibrarieiaflatadupaprefixullibsiinaintedesufixul(extensia).a(acestformatdenumeestecelintalnitinmodnormalpentru
biblioteci).Spreexemplulibrariadefunctiimatematicestandardsenumestelibm.a.Pentrualinkaaceastalibrariesevafolosiunapelgcc
degenul:
gcclmfile.cooutexe
Dacalibrarianusegasesteinlocatiilestandardpentrulibrarii,pentruafigasitadelinker,estenecesaraspecificareaexplicitaalocatiei
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
3/10
28.03.2016
Reteledecalculatoare
(inclusivcazuldirectoruluicurent),folosindoptiuneaL,intrunmodsimilarutilizariioptiuniiIpentrulocatiideheadere
3.Rutinedesistempentrumanipulareafisierelor
Undescriptordefisieresteunsimpluintregutilizatcaindexintrotabeladefisieredeschisedeunproces.
Reamintimdescriptoriistandard:
0asociatstdinintrareastandard
1asociatstdoutiesireastandard
2asociatstderrstreamuldeeroarestandard
RutineleI/Ocelemaiutilizatepentruaccesulsimanipulareafisierelorprinintermediuldescriptorilorsunt:
open()
deschidereaunuifisier
Headerelenecesaresiprototipurilefunctiei:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
intopen(constchar*pathname,intflags);
intopen(constchar*pathname,intflags,mode_tmode);
pathnamecaleacatrefisier
flagsoptiunidedeschidereafisierului(ex:O_RDWRaccescitiresiscriere)
modespecificareaexplicitaapermisiunilorasuprafisieruluiincazulcreariiacestuia(ex:S_IRWXUutilizatorulowneraredrepturide
citire,scrieresiexecutie)
Functiareturneazadescriptorulasociatfisieruluiincazdesuccessi1incazdeeroare
close()
inchidereaunuifisier
Headerelenecesaresiprototipurilefunctiei:
#include<unistd.h>
intclose(intfd);
fddescriptorulasociatfisierului(celreturnatladeschidere)
Functiareturneaza0incazdesuccessi1incazdeeroare
read()
citireadintrunfisier
Headerelenecesaresiprototipurilefunctiei:
#include<unistd.h>
ssize_tread(intfd,void*buf,size_tcount);
fddescriptorulasociatfisierului(celreturnatladeschidere)
bufpointerlabufferuldestinatiecevaretinedatelecitite
countnumaruldebytesspecificatpentruaficitit
Functiareturneazanumaruldebytescititicusuccesincazdereusitasi1incazdeeroare
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
4/10
28.03.2016
Reteledecalculatoare
write()
scriereaintrunfisier
Headerelenecesaresiprototipurilefunctiei:
#include<unistd.h>
ssize_twrite(intfd,void*buf,size_tcount);
fddescriptorulasociatfisierului(celreturnatladeschidere)
bufpointerlabufferulsursacecontinedatelecevorfiscriseinfisier
countnumaruldebytesspecificatpentruafiscris
Functiareturneazanumaruldebytesscrisicusuccesincazdereusitasi1incazdeeroare
fcntl()
Filecontrolexecutiaadiversecomenziasuprafisierului
Headerelenecesaresiprototipurilefunctiei:
#include<unistd.h>
#include<fcntl.h>
intfcntl(intfd,intcmd);
intfcntl(intfd,intcmd,longarg);
intfcntl(intfd,intcmd,structflock*lock);
fddescriptorulasociatfisierului(celreturnatladeschidere)
cmdconstantacedefinestecomandadeexecutat(ex:F_GETFLobtinereaflagurilordestareafisierului)
argargumentspecificinfunctiedecomanda
lockstructuraspecificautilizataincazulcomenzilorlegatedelock(ex:ptblocajlascriere/citire)
Valoareadereturafunctieidepindedecomanda
lseek()
setareapozitieicurenteincadrulfisierului
Headerelenecesaresiprototipurilefunctiei:
#include<sys/types.h>
#include<unistd.h>
off_tlseek(intfildes,off_toffset,intwhence);
fildesdescriptorulasociatfisierului(celreturnatladeschidere)
offsetnouapozitiespecificatainbytesfatadereferinta(negativinainte,pozitivdupa)
whencereferinta:SEEK_SETinceputulfisierului,SEEK_CURpozitiacurentainfisier,SEEK_ENDsfarsitulfisierului
Functiareturneazaoffsetulinbytesfatadeinceputulfisieruluiincazdereusitasi1incazdeeroare
Alterutine:
ioctl()manipulareafisierelorspecialeasociatediverselordeviceuri(ex:terminalul,placadesunet,etc)
fsync()roldeflush,scriepediscsaupealtsuportdateledinmemorieasociateunuifisier
ftruncate()imparte(sectioneaza)unfisierlaoanumitalungime
fstat()returneazainformatiidespreunfisierintrostructuraspecializata(stat)
fchown()modificaownerulsaugrupulasociatcuunfisierdeschis
fchmod()modificapermisiuniledeacceslafisier
fchdir()schimbacalea,directorulcurent
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
5/10
28.03.2016
Reteledecalculatoare
flock()seteazalockuri(blocaje)pefisiere(regimadvisoryuzcooperantfisierulpoatefiaccesatdinaltprocesdacaacestanuface
deasemeniuzderutinapentruaverificablocajele)
4.Manipulareafisierelorprinfunctiidelibrarie
Inafaradeutilizarearutinelordesistemcepermitaccesullafisiereprinintermediuldescriptorilor,acesteapotfimanipulatedeasemeni
prinintermediulpointeruluiFILE*siafunctiiloroferitedelibrariastdio,cepermitoptiunimaiavansateinanumitecazuricumarfispre
exempluscriereasicitireadinfisierdinperspectivaformatariidatelor.
Asemenidescriptorilordefisier,lapornireaunuiprogramceutilizeazalibrariastdio,lafiecaredinceletreistreamuristandarddeschise,
existacateunpointerdetipFILE*cunumelestdin,stdoutsistderr
Principaleleoperatiicufisiereutilizandlibrariastdiosunt:
Deschidereasiinchidereafisierelor
FILE*fopen(constchar*path,constchar*mode);
Deschideunfisier.
Parametri:pathcaleacatrefisier,modemoddeschidere(ex:"r+"readsiwrite)
Retur:pointerlafisieruldeschissiNULLincazdeeroare
intfclose(FILE*stream);
Inchideunfisier.
Parametri:streampointerlaunfisierurcevafiinchis
Retur:0incazdesucces,1(EOFEndOfFile)incazdeeroare
Citireasiscriereainfisier
Variantaneformatata
size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);
size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*stream);
ptrpointerlaunbufferdestinatiepentrudatelecitite,respectivsursapentrucelescrise
sizedimensiuneaunuibloc(record)decitit/scrisinbytes
nmembnumaruldeblocuri(records)decitit/scris
streampointerlafisieruldincareseciteste/incaresescrie
Retur:numaruldeblocuri(records)citite/scrisecusucces
Variantaformatata
Familiidefunctiibazatepeutilizareadespecificatorideformatpentruformatareadatelor(ex.:"%d"intreg,etc)
Signaturatipica:functie(destinatie/sursa,specificatordeformat,datescrise/citite)
Scriere
intprintf(constchar*format,...);scrieimplicitlastdout
intfprintf(FILE*stream,constchar*format,...);scrieinfisierulspecificatdestream
intsprintf(char*str,constchar*format,...);scrieintrunbufferdecaracterespecificatdestr
Citire(similarcuceledelascriere)
intscanf(constchar*format,...);
intfscanf(FILE*stream,constchar*format,...);
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
6/10
28.03.2016
Reteledecalculatoare
intsscanf(constchar*str,constchar*format,...);
Returneazanumaruldecaracterescrise/cititefaraterminatoruldesiradaugatimplicit('\0')siovaloarenegativaincazdeeroare
Variantabazatapefunctiicuefectlaniveldecaractersilinie
Estevorbadefamiliiledefunctiiutilizatepentruascrie/citicateuncaractersauoliniedinfisierlaunsingurapel
intfgetc(FILE*stream);
citesteuncaracterdinstream
char*fgets(char*s,intsize,FILE*stream);
citestesize1caracteredinstreampanalamaximsfarsitullinieicurente
intgetc(FILE*stream);
lafelcafgetc
intgetchar(void);
citesteuncaracterdelastdinimplicit
char*gets(char*s);
citesteoliniedelastdinimplicit
intfputc(intc,FILE*stream);
scrieuncaracterinstream
intfputs(constchar*s,FILE*stream);
scrieolinieinstream
intputc(intc,FILE*stream);
intputchar(intc);
lafelcafputc
scrieuncaracterlastdoutimplicit
intputs(constchar*s);
scrieolinielastdoutimplicit
Functiipentruobtinereastariifisierului
intfeof(FILE*stream);
intferror(FILE*stream);
voidclearerr(FILE*stream);
feofincazulincercariidecitiredupaceseajungelafinalulfisieruluivafisetatunflaginterndeEndOfFileiarvaloareareturnatade
aceastafunctievafidiferitade0
ferrorreturneazaovaloarenenuladacaunflaginterndeeroarealfisieruluiestesetat(deexempludacaincercamsascriemintrun
fisierdeschisdoarcudrepturidecitire)
clearerrreseteazaflaguriledeEOFsideeroare
Functiidepozitionareinfisier
intfseek(FILE*stream,longoffset,intwhence);
longftell(FILE*stream);
voidrewind(FILE*stream);
fseekseteazapozitiainfisierfatadereferintaargumentelesuntsimilarelseek
ftellreturneazapozitiacurentainfisier
rewindseteazapozitiainfisierla0
Ingeneral,incazuleseculuiuneifunctiidincelementionate,coduldeeroarevafiretinutinvariabilaglobalaerrno.Pentrudetaliiasupra
diverselorcodurideeroareconsultatiintrareadinmanualcorespunzatoarefunctiei(ingeneralman2functiesauman3functie)
5.Lucrulcudirectoare
Operatiilelegatedeaccesulladirectoaresuntfacilitateprinstructurilededatesifunctiilepuseladispozitiedeheaderuldirent.h
Structurilededatenecesarepentruoperatiilecudirectoaresunt:
DIRreprezinta,sarputeaspune,intrareaefectivapediscdetipdirector,insensulunuistreamfisiercecontineoseriedeintrari
(subdirectoaresialtefisiere)
structdirentreprezintaostructuradeinformatiiasociatauneistructuriDIRcecontinediverseinformatiirelativlaointraredin
respectivuldirectorcumarfinumeleincampuld_namedetipvectordecharsautipulintrarii(fisiersaudirector)incampuld_type
Functiiledisponibilepentrulucrulcudirectoaresunturmatoarele:
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
7/10
28.03.2016
Reteledecalculatoare
opendir()
"deschiderea"unuidirector
DIR*opendir(constchar*dirname)
dirnamepointerlacalearespectivuluidirector
returunpointerlaostructuraDIR,corespunzandprimeiintraridinrespectivuldirectorincazdesuccessinullincazdeeroare
readdir()
citireainformatiilordespreointraredindirector
structdirent*readdir(DIR*dirp)
dirppointerlaointraredincadruldirectorului
returunpointerlaostructuradirentcorespunzatoareintrariiindicatedepointerulDIR,urmatadeavansarealaurmatoareaintrare
dinacelasidirectorsaunullincazcanumaiexistaaltaintraresideasemeniincazdeeroare(cudiferentacainacestultimcazeste
setatasivariabilaerrno)
rewinddir()
repozitionarealaprimaintraredincadruldirectorului
voidrewinddir(DIR*dirp)
dirppointerlaointrareoarecaredincadruldirectoruluiincareserealizeazarepozitionarea
telldir()
obtinereaindexuluiuneiintraridincadruldirectorului
off_ttelldir(DIR*dirp)
dirppointerlaointraredincadruldirectorului
returunintregcereprezintapozitiacurentaaintrariiincadruldirectoruluisi1incazdeeroare
seekdir()
pozitionarealaoanumitaintrareincadruldirectorului
voidseekdir(DIR*dir,off_toffset)
dirpointerlaintrareacurentaincadruldirectorului
offsetnouapozitiecarevaindicaintrareacurenta
closedir()
"inchiderea"directorului
intclosedir(DIR*dirp)
dirppointerlaointrareincadruldirectorului
retur0dacainchidereasaefectuatcusucces,insemnandcapointeruldirpnuvamaifivalidpentrurespectivuldirector,sau1in
cazdeesec
6.Managementulmemorieiquickreminder
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
8/10
28.03.2016
Reteledecalculatoare
6.Managementulmemorieiquickreminder
InaceastasectiunereamintimprincipalelefunctiidemanagementamemorieidinlimbajulC.Acesteacerincludereainprograma
stdlib.h:
malloc()
alocareaneinitializataaunuiblocdememorie
void*malloc(size_tsize);
sizenumaruldeoctetidealocat
returpointerlalocatiadememoriealocata,NULLincazdeeroare
calloc()
alocareainitializatacu0aunuiblocdememorie
void*calloc(size_tnmemb,size_tsize);
nmembnumaruldeblocuridealocat
sizedimensiuneainoctetidealocat
returpointerlalocatiadememoriealocata,NULLincazdeeroare
realloc()
redimensionareaunuiblocdememorieanterioralocat(farainitializarepentrudimensiuneaadaugata)
void*realloc(void*ptr,size_tsize);
ptrpointerlaunblocdememoriealocatanteriordacaeNULLcomportareaesimilaramalloc
sizenouadimensiunedacae0memoriaeeliberata(similarfree)
returpointerlalocatiadememoriealocata,NULLincazdeeroare
free()
eliberareaunuiblocdememorie
voidfree(void*ptr);
ptrpointerlaolocatiedememoriealocatacuunadinfunctiileanterioare
7.Exercitii
7.1.Bash
1.Ceefectareurmatoarealiniedecomenzi:echo`who|cutc19|sort|uniq`>>users?(hint:folositimanpentruaaflaefectul
comenzilor)Cumputetipastrarezultatelepartialedintrefiecaredincomenzileinlatuiteprinpipeinfisiereseparatepentruconsultare
ulterioaraastadiuluideexecutieintermediar,faraaseparaliniadecomenziinmaimulte?Realizatiaceastamodificare.(hint:mantee)
2.Folosindstat,grep,cutafisatiinodulunuifisier.Sepoatesimaisimplu?(hint:doarcuunadincomenzi)
3.Saseafisezetotiutilizatoriicareaunumeleconturilorterminatein"x".
7.2.Lucrulcufisiere
1.Fiinddaturmatorulfisiertestpakscrietiunprogramcaresaciteascadinacestaun"pachet"cuurmatoareastructura(utilizand
primitivedesistem)siafisaticontinutul"campurilor"acestuia:
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
9/10
28.03.2016
Reteledecalculatoare
portsursaintreg065535
portdestinatieintreg065535
lungimeintreg065535
checksumintreg065535
datesirdecaracterededimensiune32
2.Implementatiunprogramcaresimuleazafindinmodrecursiv.
3.Sasescrieunprogramcareprimestecaargumentunnumedefisiersaudirectorlaintrare,iarlaiesirereturneazatipulintrariidepe
disc(fisiersaudirector)simomentulultimeimodificari.(hint:fstat)
file:///C:/My%20Web%20Sites/Retele%20Calculatoare/profs.info.uaic.ro/_eonica/rc/lab01.html
10/10