Sunteți pe pagina 1din 10

28.03.

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

S-ar putea să vă placă și

  • SQL
    SQL
    Document71 pagini
    SQL
    Emilian Necula
    Încă nu există evaluări
  • jQuery
    jQuery
    Document16 pagini
    jQuery
    Emilian Necula
    Încă nu există evaluări
  • CSS
    CSS
    Document16 pagini
    CSS
    Emilian Necula
    Încă nu există evaluări
  • HTML
    HTML
    Document28 pagini
    HTML
    Emilian Necula
    Încă nu există evaluări
  • 04 for
    04 for
    Document6 pagini
    04 for
    Emilian Necula
    Încă nu există evaluări
  • GitHub
    GitHub
    Document5 pagini
    GitHub
    Emilian Necula
    Încă nu există evaluări
  • Descrierea Metodei Backtracking
    Descrierea Metodei Backtracking
    Document4 pagini
    Descrierea Metodei Backtracking
    Emilian Necula
    Încă nu există evaluări