• Non ci sono risultati.

Lu c id i R ea li zz a ti i n C o ll a bo ra z ion e c on :

N/A
N/A
Protected

Academic year: 2021

Condividi "Lu c id i R ea li zz a ti i n C o ll a bo ra z ion e c on :"

Copied!
17
0
0

Testo completo

(1)

Unix: Gestione File 1

C o rs o d i Fond a m e n ti d i I n fo rm a tica 2 C dL Ing e gn e ri a In fo rm a tica Ing . F ra n c o Z a m bon e lli

IL S IS T E M A O PE RA T IV O UN IX : G ES T IO N E F IL E IN P R OG RA MM I C PE R UN IX

Lu c id i R ea li zz a ti i n C o ll a bo ra z ion e c on :

P ro f. L e tiz ia L e on a rd i U n ive rs it à d i M od e n a

P ro f. A n ton io C o rr a d i U n ive rs it à d i B o logn a

P ro f. C esa re S te fa n e lli U n ive rs it à d i F e rr a ra

Unix: Gestione File 2

I F il e in U n ix

U n p ro c e ss o U n ix v ede tu tt o il m ondo e s te rno (I/O ) c o m e un in s ie m e d i de sc ritt o ri (da qu i d isc ende o m ogene ità tr a fil e e d is po s iti v i d i U n ix ).

I f ile de sc rip to r s ono p icc o li i n te ri non nega tiv i c he iden tif ic ano i fil e ape rti

s ta nd a rd inpu t, s ta nd a rd ou tpu t, s ta nd a rd e rr o r s ono a ss o c ia ti a i fil e de sc rip to r 0 , 1 , 2

N uo v e ope ra z ion i d i R ICH IES T A p rodu c ono nuo v i fil e de sc rip to r pe r un p ro c e ss o .

N u m e ro m a ss im o d i fd pe r p ro c e ss o e pe r s is te m a

P ro ce ss o P ro ce ss o

Tabella deidescrittorifd 0fd 1File

rete pipe

I p ro c e ss i i n te rag isc ono c on l’I/O s e c ondo il pa rad ig m a open -r ead -w rit e -c lo s e ( ope ra z ion i d i p ro logo e d i ep ilogo )

F le ss ib ili tà (po ss ib ili tà d i p ipe e rid ire z ione )

S ys te m C a ll pe r ope ra re a ba ss o liv e llo s u i fil e (

creat, open, close, read/write, lseek

)

(2)

Unix: Gestione File 3

P ro logo (a p e rt u ra /c rea z ion e d i fil e ):

CR E A TE fd = cre a t (n am e, m od e) ; in t fd ; /* fil e d es cr ip to r * / in t m od e; /* att ribu ti d el fil e * /

d iri tt i d i UN IX (d i s o lit o e s p re ss i i n o tt a le ) fil

e na m e ape rto in sc ritt u ra

O P E N fd = o p en (n am e, fla g ); ch ar *n am e; in t fla g ; / * 0 le tt u ra , 1 sc ritt u ra , 2 en tr am b e * / in t fd ; /* fil e d es cr ip to r * /

ap re il fil e d i no m e n a m e c on m oda lit à fla g in /u s r/i n c lud e /f c n tl. h s ono de fin ite le c o s tan ti O _ RD O N L Y , O _ W R O N L Y , O _ RD W R , O _ APPE ND , O _ CR EA T , O _ T RUNC , O _ EX C L E s e m p i

fd=open(“file”, O_WRONLY| O_APPEND)fd=open(“file”, O_WRONLY| O_CREAT| O_APPEND, 0644)fd=open(“file”, O_WRONLY| O_CREAT| O_TRUNC, 0644)fd=open(“lock”, O_WRONLY| O_CREAT| O_EXCL, 0644)

E p il ogo (c h iu s u ra d i fil e ):

C L O S E re tv al = cl o se (f d ); in t fd , re tv al;

O pe ra z ion i d i R ICH IES T A e R IL AS C IO ris o rs e (m a x nu m . f d ape rti pe r p ro c e ss o e pe r m a cc h ina )

Unix: Gestione File 4

I F IL E in UN IX

I f ile in U n ix s ono una s equen z a d i B Y T E

A CC ESS O se qu e n z ia le

I f ile s ono rapp re s en ta ti da i fil e de sc rip to r

P re s en z a d i I/O po in te r a ss o c ia to a l fil e (e a l p ro c e ss o ). I/O po in te r pun ta a lla po s iz ione c o rr en te de l fil e s u c u i il p ro c e ss o s ta ope rando (sc riv endo /leggendo )

P ro ce ss o P ro ce ss o

Tabella deidescrittori

fd | I/O pointer File

(3)

Unix: Gestione File 5

F il e D esc ri p to r

In gene ra le , la le tt u ra da fd 0 ⇒ legge da s ta nd a rd inpu t la sc ritt u ra s u fd 1 ⇒ sc riv e s u s ta nd a rd ou tpu t la sc ritt u ra s u fd 2 ⇒ sc riv e s u s ta nd a rd e rr o r

Q ue s ti tr e fil e d esc ri p to r s ono ape rti au to m a tic a m en te da l s is te m a (s he ll) pe r ogn i p ro c e ss o e c o llega ti a ll'I/O

P e r p roge tt a re F ILT R I c ioè u s a re R ID IR E Z IO N E e P IP IN G

i fil tr i l eggono d ire tt a m en te da l fil e de sc rip to r 0 sc riv ono d ire tt a m en te s u l fil e de sc rip to r 1

C o m p le ta o m og e n e it à d e i fil e c on i d is po s it iv i

fd = open (" /de v /p rin te r" , O _ W R O N L Y );

A n c he pe r i d is po s iti v i u s ia m o le s te ss e p rim iti v e op e n , rea d , w ri te , c lo se

Unix: Gestione File 6

O p e ra z ion i d i L e tt u ra e S c ri tt u ra

R E AD n rea d = re a d (f d , bu f, n );

W R ITE n w rit e = w ri te (f d , bu f, n );

in t n rea d , n w rit e, n , fd ; ch ar *bu f;

le

tt u ra e sc ri tt u ra d i un fil e a vv engono a pa rti re da lla po s iz ion e c o rr e n te de l fil e ed a v an z ano il pun ta to re (I/O po in te r) a ll'i n te rno de l fil e

• r

e s tit u isc ono : il nu m e ro d e i b y te s u c u i hanno la v o ra to -1 in c a s o d i e rr o re (c o m e tu tt e sys te m c a ll)

O gn i u ten te ha la p rop ri a v is ion e de i fil e ape rti :



N e l c a s o d i p iù u ten ti c he ap rono lo s te ss o fil e , ogn i p ro c e ss o u ten te ha un p rop rio I/O po in te r s epa ra to



SE un u ten te legge o sc riv e , m od ifi c a s o lo il p rop rio po in te r, non m od ifi c a l’I/O po in te r d i a ltr i

F IL E SYS T E M U n u ten te non ha v is ib ili tà de lle a z ion i d i un a ltr o u ten te

(4)

Unix: Gestione File 7

E se m p i d i l e tt u ra /sc ri tt u ra

C O P IA d a un F IL E a un A LT R O

#include <fcntl.h>#include <stdio.h>#define perm 0644

main (){ char f1 [20]= "file",f2 [40]= "/temp/file2";int infile, outfile; /* file descriptor */int nread;char buffer [BUFSIZ];

infile = open (f1, O_RDONLY);outfile = creat (f2, perm);

while((nread = read(infile, buffer, BUFSIZ)) > 0)

write (outfile, buffer, nread );

close(infile);close(outfile);}

L e gg e d a l fil e fil e e sc ri ve s u fil e2 in /t e m p

Unix: Gestione File 8

C op ia d a un F il e a un a lt ro (u s o a rgo m e n ti)

#define perm 0777main (argc, argv)int argc;char **argv;

{ int infile, outfile, nread;char buffer [15];

infile = open(argv[1], 0);outfile = creat(argv[2], perm);while (( nread = read(infile , buffer, 1)) > 0 ) write(outfile, buffer, 1 );

close(infile);close(outfile);}

C on R ID IR E Z IO N E

#d ef in e L UNG 1 m ai n () { ch ar bu ff er [ L UNG ]; w h il e ( re ad ( 0 , bu ff er , L UNG ) > 0 ) w rit e (1 , bu ff er , L UNG ); }

Il s is te m a e s egue i c o llega m en ti tr a fil e de sc rip to r e fil e

(5)

Unix: Gestione File 9

C op ia fil e c on c on tr o ll o d e g li e rr o ri

#include <fcntl.h>#include <stdio.h>#define perm 0744 /* tutti i diritti all'ownerlettura al gruppo ed altri */

main (argc, argv)int argc;char **argv;{ int status;int infile, outfile, nread;char buffer[BUFSIZ]; /*buffer per icaratteri*/

if (argc != 3) { printf (" errore \n"); exit (1); }

if ((infile=open(argv[1], O_RDONLY)) <0)exit(1); /* Caso di errore */

if ((outfile=creat(argv[2], perm )) <0){close (infile); exit(1); }

while((nread=read(infile, buffer, BUFSIZ)) >0 ){ if(write(outfile, buffer, nread)<nread) {close(infile);close(outfile);exit(1);} /* Caso di errore */}close(infile); close(outfile); exit(0);}

E ff ic ien z a de lle sys te m c a ll rea d e w ri te : d ipenden z a da lle d im e s ion i de l bu ff e r

Unix: Gestione File 10

E se m p io : In se ri m e n to d i ca ra tt e ri i n un fil e

#include <fcntl.h>#define perm 0744

main (argc, argv)int argc;char **argv;{ int fd;char *buff;int nr;

printf("il nome del file su cui inserirei caratteri è %s\n", argv[1]);

buff=(char *)malloc(80);/* bisogna ALLOCARE memoria per il BUFFER */

if ((fd = open(argv[1], O_WRONLY)) < 0)fd = creat(argv[1], perm);/*oppure uso di open con quali flag?*/printf("Aperto o creato con fd = %d\n", fd);

while ((nr=read(0, buff,80)) > 0)write(fd, buff, nr);

close(fd);}

(6)

Unix: Gestione File 11

L a S ta nd a rd I/ O L ib ra ry

La S tanda rd I/O lib ra ry è c o s tr u ita a l d i s op ra de lle S ys te m C a ll

E ’ una lib re ria c on tenen te fun z ion i pe r a cc ede re a i fil e a p iù a lt o li ve ll o .

In v e c e d i fil e de sc rip to r u s a s tr ea m rapp re s en ta ti da una s tr u tt u ra da ti d i tipo F IL E

s td in è uno s tr ea m a ss o c ia to a l fil e de sc rip to r s ta nd a rd inpu t s tdou t è uno s tr ea m a ss o c ia to a l fil e de sc rip to r s ta nd a rd ou tpu t s td e rr è uno s tr ea m a ss o c ia to a l fil e de sc rip to r s ta nd a rd e rr o r

F o rn isc e :

fo rm a tt a z ion e



p rin tf (" E cc o un in te ro % d \n ", c on t) bu ff e ri ng



C o s a fa la ge tc () ? m a gg io re e ff ic ie n z a



d im en s ione de i bu ff e r

S i sc on s ig lia l'u s o c on te m po raneo d i S ys te m C a ll e fun z ion i de lla S tanda rd I/O lib ra ry ne ll’ a cc e ss o a uno s te ss o fil e .

Unix: Gestione File 12

O pe ra z ion i non S equen z ia li (r ando m a cc e ss )

L S EE K n ew po s = ls ee k (f d , o ff se t, o rig in ); long in t n ew po s, o ff se t; i n t fd ; in t o rig in ; / * 0 d all 'in iz io , 1 d al co rr en te , 2 d all a fin e* /

S i s po s ta la po s iz ion e c o rr e n te ne l fil e pe r il p ro c e ss o in v o c an te .

Le s u cc e ss iv e ope ra z ion i d i l e tt u ra /sc ritt u ra a pa rti re da lla nuo v a po s iz ione

lseek(fd, 10, 2)

c o s a s u cc ede?

lseek(fd, -10, 0)

???

(7)

Unix: Gestione File 13

O pe ra z ion i s u i d is po s iti v i e fil e so lo s inc rone ci o è c on a tt es a d el co m p le ta m en to d ell 'op er a zi on e

A T O M IC IT À d e ll a S IN GO L A O PE RA Z IO N E d i l e tt u ra / sc ritt u ra e d i a z ione s u un fil e .

O p e ra z ion i p ri m it ive a z ion i e le m en ta ri e non in te rr o m p ib ili de lla m a cc h ina v irt ua le UN IX

P1 111111111 write

P2 2222222222 write file

N O N è ga ran tit a la A to m ic it à de lle s equen z e d i ope ra z ion i.

P e r e s e m p io se p iù p ro cess i m a nd a no fil e s u ll a s ta m p a n te S i po ss ono m e sc o la re le linee in v ia te a lla s ta m pan te !!!!

==> D e fin iz ione d i un g es to re de l fil e (sys te m) c he in c ap s u la la ris o rs a

Gestore File

Unix: Gestione File 14

I F il e e la m u lt i- u te n z a

O gn i u ten te ha un iden tif ic a to re de tt o u id (u s e r id ) e appa rti ene a un g ruppo g id (g roup id ), c on tenu ti ne l fil e /e tc /pa ss w d . E s e m p io :

franco:ITZ7b:230:30:F.Zambonelli:/home/franco:/bin/csh

U n p ro c e ss o a c qu is isc e u id e g id de ll’ u ten te c he lo lan c ia .

Il k e rne l m e m o rizz a pe r ogn i fil e u se r id ed g roup id de l p ro c e ss o c rea to re .

U n p ro c e ss o può a cc ede re a un fil e s e : 1 . u id p ro c e ss o == 0 2 . u id p ro c e ss o == u id p rop rie ta rio fil e e d iri tt i O K 3 . u id p ro c e ss o != u id p rop rie ta rio fil e m a g id p ro c e ss o == g id p rop rie ta rio fil e e d iri tt i O K 4 . u id e g id p ro c != u id e g id fil e , m a d iri tt i o the r O K

A tt en z ione : in rea ltà il k e rne l gua rda e ff ec tive u id e g id de l p ro c e ss o c he a cc ede a l fil e

(8)

Unix: Gestione File 15

D ir itt i d i access o a un fil e

P e r v e rif ic a re i d iri tt i d i un u te n te d i a cc ede re a un fil e :

ACC E SS re tv al = a cce ss (p at hn am e, am od e) ; ch ar * p at hn am e; in t am od e; in t re tv al;

Il pa ra m e tr o a m od e può e ss e re : 04 read a cc e ss 02 w rit e a cc e ss 01 e x e c u te a cc e ss 00 e x is ten c e

access r e s tit u isc e il v a lo re 0 in c a s o d i s u cc e ss o , a ltr im en ti -1 (e tipo d i e rr o re in e rr no )

N o ta : a cc e ss v e rif ic a i d iri tt i de ll’ u ten te , c ioè fa u s o de l rea l u id de l p ro c e ss o (non u s a e ff e c tiv e u id )

Unix: Gestione File 16

D ir itt i d i access o a un fil e

P e r c a m b ia re i d iri tt i d i un fil e : C H M O D re tv al = ch m o d (p at hn am e, n ew m od e) ; ch ar * p at hn am e; in t n ew m od e; in t re tv al;

Il pa ra m e tr o n e w m od e c on tiene i nuo v i d iri tt i ch m o d è e s egu ib ile da o w ne r o s upe ru s e r

P e r c a m b ia re il p rop rie ta rio e il g ruppo d i un fil e : C HO W N re tv al = ch o w n (p at hn am e, o w n er _ id , g roup_ id ); ch ar * p at hn am e; in t o w n er _ id ; in t g roup_ id ; in t re tv al;

ch o w n è e s egu ib ile da o w ne r o s upe ru s e r

P rob le m a : c o s a s u cc ede s e un fil e ha s e t- u s e r- id s e tt a to?

(9)

Unix: Gestione File 17

O p e ra z ion i d i L INK e UN L INK

UN L IN K re tv al = un li nk (n am e) ; ch ar *n am e; in t re tv al;

Q ue s ta p rim iti v a c on s en te d i c an c e lla re (D IS T RU GG E R E ) un fil e

In rea ltà , c o m e d ic e il s uo no m e , il s uo c o m p ito è c an c e lla re un lin k



ne l c a s o il nu m e ro d i li n k a rr iv i a Z E R O a llo ra s i ope ra an c he la D IS T RU Z IO N E de l fil e c ioè la libe ra z ione de llo s pa z io s u d isc o

L IN K re tv al = li nk (n am e1 , n am e2 ); ch ar *n am e1 , n am e2 ; in t re tv al;

Q ue s ta p rim iti v a c on s en te d i c rea re un nuo v o no m e no m e2 (un lin k ) pe r un fil e e s is ten te



v iene in c re m en ta to il nu m e ro d i li n k

P rob le m a de i d iri tt i



li n k gua rda i d iri tt i de l d ire tt o rio

T ra m ite l'u s o d i que s te due p rim iti v e v iene rea lizz a to , pe r e s e m p io , il c o m ando m v d i UN IX

Unix: Gestione File 18

E se m p io : Im p le m e n ta z ion e d e l c o m a ndo m v (ve rs ion e se m p li fica ta )

main (argc, argv)int argc;char **argv;{if (argc != 3){ printf ("Errore num arg\n"); exit(1); }/* controllo del numero di parametri */

if (link(argv[1], argv[2]) < 0){ perror ("Errore link"); exit(1);}/* controllo sulla operazione di link*/

if (unlink(argv[1]) < 0){ perror("Errore unlink"); exit(1);}/* controllo sulla operazione di unlink*/

printf ("Ok\n");exit(0);}

(10)

Unix: Gestione File 19

D ir e tt o ri

a ) C a m b io d i d ir e tt o ri o

re tv al = chd ir ( no m ed ir) ; ch ar *no m ed ir ; in t re tv al;

Q ue s ta fun z ione res tit u isce 0 s e s u ccess o ( c ioè il c a m b io d i d ire tt o rio è a vv enu to ), a ltr im en ti res tit u isce -1 (in c a s o d i in s u ccess o )

b ) A p e rt u ra d i d ir e tt o ri o

# in cl ud e < d ir en t.h >

d ir = o p end ir ( no m ed ir) ; ch ar *no m ed ir ; D IR *d ir ; /* D IR è una st ru tt u ra a st ra tt a e non u sab il e da ll 'u te n te * /

Q ue s ta fun z ione res tit u isce un v a lo re d iv e rs o da NU LL s e ha s u ccess o (c ioè l'ape rtu ra de l d ire tt o rio è a vv enu ta ), a ltr im en ti res tit u isce NU LL (in c a s o d i in s u ccess o )

c ) C h iu s u ra d ir e tt o ri o

# in cl ud e < d ir en t.h > cl o se d ir ( d ir) ; D IR *d ir ;

Q ue s ta p rim iti v a e ff e tt ua la c h iu s u ra de l d ire tt o rio

Unix: Gestione File 20

d ) L e tt u ra d ir e tt o ri o

# in cl ud e < sy s/t y p es .h > # in cl ud e < d ir en t.h >

d es cr = re a dd ir ( d ir) ; D IR *d ir ; st ru ct d ir en t *d es cr ;

La fun z ione res tit u isce un v a lo re d iv e rs o da NU LL s e ha a v u to s u ccess o (c ioè a le tt u ra de l d ire tt o rio a vv enu ta ), a ltr im en ti res tit u isce NU LL (in c a s o d i in s u ccess o ) In c a s o d i s u cc e ss o , de sc r pun ta ad una s tr u tt u ra d i tipo d iren t st ru ct d ire n t { long d_ ino ; /* i_ nu m b er * / o ff _ t d_o ff ; /* o ff se t d el p ro ss im o * / un si gn ed sho rt d_ rec le n ; /* lungh ezza d el rec o rd * / un si gn ed sho rt d_n am el en ; / * lungh ezza d el no m e * / ch ar d_n am e[ 1 ]; / * n o m e d el fil e * / }

la s tr inga c he pa rte da d es cr - > d_n am e r app re s en ta il no m e d i un fil e ne l d ire tt o rio ape rto

Q ue s ta s tr inga te rm ina c on un c a ra tt e re nu llo (c on v en z ione C )



po ss ib ili tà d i no m i c on lunghe zz a v a riab ile La lunghe zz a de l no m e è da ta da l v a lo re d i d_na m e len

Le p rim iti v e c hd ir , op e nd ir , r ea dd ir e c lo se d ir s ono

INDIPENDENTI

da lla s pe c ifi c a s tr u tt u ra in te rna de l d ire tt o rio



v a lgono s ia pe r U n ix BS D c he pe r U n ix S ys te m V

(11)

Unix: Gestione File 21

e ) C rea z ion e d i un d ir e tt o ri o

M K D IR re tv al = m kd ir ( p at hn am e, m od e) ; ch ar * p at hn am e; in t m od e; / * d ir itti su l d ir ett o rio * / in t re tv al;

La p rim iti v a M K D IR c rea un d ire tt o rio c on il no m e e i d iri tt i s pe c ifi c a ti ===> v engono s e m p re c rea ti i fil e . (li n k a l d ire tt o rio c o rr en te ) .. (li n k a l d ire tt o rio pad re )

m k d ir r e s tit u isc e il v a lo re 0 in c a s o d i s u cc e ss o , a ltr im en ti un v a lo re nega tiv o

A ltr a p rim iti v a è m k nod il c u i u s o è pe rò ris e rv a to a l s upe ru s e r ( e non c rea . e .. )

Unix: Gestione File 22

E se m p io : Im p le m e n ta z ion e d e l c o m a ndo ls

#include <sys/types.h>#include <dirent.h>#include <fcntl.h>

my_dir (name)char *name; /* nome del dir */{DIR *dir; struct dirent * dd;int count = 0;

dir = opendir(name);while ((dd = readdir(dir)) != NULL){printf("Trovato file %s\n", dd-> d_name);count++;}printf("Numero totale di file %d\n", count);closedir(dir);return (0);}

main (argc, argv)int argc;char *argv[ ];{if (argc <= 1) { printf("Errore\n"); exit(1); }printf("Esecuzione di mydir\n");my_dir(argv[1]);exit(0);}

(12)

Unix: Gestione File 23

E se m p io : S i v uo le op e ra re s u un a g e ra rc h ia d i D IR E TT O R I a ll a ri ce rca d i un fil e c on no m e s p ec if ica to

P e r ESP L O R A R E la ge ra rc h ia s i u tili zz a la fun z ione pe r c a m b ia re d ire tt o rio c hd ir e le fun z ion i op e nd ir , rea dd ir e c lo se d ir

/* file dirfun.c */#define NULL 0#include <sys/types.h>#include <dirent.h>

/* La soluzione seguenteASSUME che il nome deldirettorio sia dato in modo ASSOLUTO.NOTA BENE: questa soluzione vabene se e solo seil direttorio di partenza non è la radice (/).PERCHÈ ? */

void esplora ();

main (argc, argv)int argc;char **argv;{ if (argc != 3){printf("Numero parametri non corretto\n");exit (1);} if (chdir(argv[1])!=0){perror("Errore in chdir"); exit(1);} esplora (argv[1], argv[2]);}

Unix: Gestione File 24 /* funzione di esplorazione diuna gerarchia:opera in modo RICORSIVO */void esplora (d, f)char *d, *f;{ char nd [80]; DIR *dir;struct dirent *ff; dir = opendir(d); while (((ff = readdir(dir)) != NULL)){if((strcmp (ff -> d_name, ".") == 0) || (strcmp (ff -> d_name, "..") ==0))continue;/* bisogna saltarei nomi del direttorio correntee del direttorio padre */ if (chdir(ff -> d_name) != 0) {/*è un file e non un direttorio*/if ( strcmp ( f, ff-> d_name) == 0)printf("file %s nel dir %s\n", f, d);/*eventuali altre operazioni sul file:ad esempio apertura,etc. */} else { /*abbiamo trovato un direttorio */strcpy(nd, d); strcat(nd, "/"); strcat(nd, ff-> d_name); esplora ( nd, f); chdir("..");/* bisogna tornare su di un livello */ }closedir(dir);}}

(13)

Unix: Gestione File 25

V e ri fica d e ll o s ta to d i un fil e S T A T # in cl ud e < sy s/t y p es .h > # in cl ud e < sy s/ st at .h > re tv al = st a t (p a thn a m e, & bu ff) ; ch ar * p at hn am e; st ru ct st at bu ff ; /* st ru tt u ra ch e rapp re se n ta il d es cr itt o re d el fil e * / in t re tv al;

F S T A T re tv al = fs ta t (f d , & bu ff) ; in t fd ; /* fil e d es cr ip to r * /

F S T A T può e ss e re u s a to s o lo s e il fil e è g ià ape rto

E n tr a m be le p rim iti v e rit o rnano il v a lo re 0 in c a s o d i s u cc e ss o , a ltr im en ti un v a lo re nega tiv o

V ed ia m o qua li po ss ono e ss e re i c a m p i de lla s tr u c t s ta t: st ru ct st a t { u sho rt st _ m od e; /* m odo d el fil e * / ino_ t st _ ino ; /* I_nod e nu m b er * / d ev_ t st _d ev ; /* ID d el d is po siti vo * / d ev_ t st _ rd ev ; /* so lo p er f il e sp ec ia li * / sho rt st _n li nk ; /* nu m er o d i li nk * / u sho rt st _u id ; /* U se r I D d el p rop rie ta rio * / u sho rt st _g id ; /* G roup ID d el p rop rie ta rio * / o ff _ t st _ si ze ; /* L ungh ezza d el fil e in b y te * / ti m e_ t st _ ati m e; /* te m po d ell 'u lti m o acce ss o * / ti m e_ t st _ m ti m e; /* te m po d ell 'u lti m a m od if ica * / ti m e_ t st _ cti m e; /* te m po u lti m o ca m b ia m en to d i st at o * / }

Unix: Gestione Files in C per UNIX - 26

La s tr u tt u ra d i un i- node

L ’ i- nod e è il de sc ritt o re de l fil e

S tr u tt u ra d i un i-node pe r i d is po s it iv i

nu m e ro ID en tif ic a tiv o : nu m e ro m a gg io re d riv e r d i d is po s iti v o (pe r una tabe lla d i c on figu ra z ione ) nu m e ro m ino re qua le d is po s iti v o

c lasse de l d is po s iti v o a b lo cc h i / a c a ra tt e ri

S tr u tt u ra d i un i-node pe r i fil e no rm a li/ d ir e tt o ri

- P rop ri e ta ri o u s e r id , g roup id (U ID e GI D );

- tipo de l fil e (o rd ina rio , d ire tt o rio o s pe c ia l fil e );

- p e rm ess i r ead /w rit e /e x e c u te pe r u ten te , g ruppo e a ltr i;

- i b it S U ID , S GI D , e 's ticky ';

- nu m e ro de i li n k de l fil e ;

- d im e n s ion e de l fil e

- i nd ir izz i d i tr ed ic i b lo cc h i

(14)

Unix: Gestione Files in C per UNIX - 27

R IT R O V AR E i b lo cc h i fis ic i d e l F IL E

I p rim i d ie c i i nd iri zz i d ir e tt i

L 'und ic e s im o ind iri zz o è ind ir e tt o ind ir izz o a rea c h e c on tie n e g li i nd ir izz i d i b lo cc h i

E s . c on b lo cc h i d i 512 b y te e ogn i i nd iri zz o d i 4 b y te 10 + 128 b lo cc h i



lunghe zz a fil e : 10 *512 + 128 *512 = 70656 Il dod ic e s im o du e li ve lli d i i nd ire tt e zz a : lunghe zz a m a ss im a d i fil e 10 + 128 + 128 *128 b lo cc h i Il tr ed ic e s im o t re li ve lli d i i nd ire tt e zz a fino a G b y te : 10 + 128 + 128 *128 + 128 *128 *128 b lo cc h i.

Ind ir iz zi D at a b lo ck s

01101112

S i fa v o risc ono fil e d i m e d ia lungh e zz a F il e d i d im en s ion i teo ric a m en te illi m it a ta (c irc a G b y te )

Unix: Gestione Files in C per UNIX - 28

S tr u tt u ra fis ica d e l fil e sys te m

Il d isc o v iene s udd iv is o in pa rti d i d im en s ione fiss a c o m po s te d i b lo cc h i

boo t- b lo ck

" s up e rb lo ck " de sc riv e il re s to de l fil e sys te m ( d im ., s tr u tt u ra ) una lis ta de i b lo cc h i li b e ri una lis ta deg li i- nod e li b e ri

" i- li s t" lis ta deg li i- nod e

B lo cc h i d a ti

(15)

Unix: Gestione Files in C per UNIX - 29

Il D ir e tt o ri o

U n d ire tt o rio è un fil e c on una s tr u tt u ra de l tipo :

n o m e fil e i- n u m b er

no m e fil e è un no m e re la tiv o , non a ss o lu to i- nu m b e r è c o llega to in m odo un iv o c o a ll' i-node de l fil e

a ogn i fil e (o d ire tt o rio ) c on tenu to ne l d ire tt o rio , v iene a ss o c ia to l’i -nu m be r c he lo iden tif ic a un iv o c a m en te

il fil e (d ir e tt o ri o ) /h o m e/ ce sa re c o n tie n e :

file 1 1 8 9

file 2 1 3 3

miod i r 121

. 110

.. 89 /h o m e/ ce sa re /h o m e/ ce sa re

fil e1 fil e1 fil e2 fil e2 m io d ir m io d ir m io d ir

i-list

i- n od e

121121

C o s a s u cc ede ne l c a s o d i

link(“file1”, “file3”)

??

Unix: Gestione Files in C per UNIX - 30

O rg a n izz a z ion e d e l F il e S ys te m UN IX

I/O pointer Spazio Utente(Processo)Spazio di sistema

i-node Tabelladei FileAttivi

Tabella dei File Aperti di Sistema fd

Tabella dei File Aperti del Processo Memoriadi Massa Dispositivi fisici

1 soloi-nodeper file

pentry per file

Tabe ll e g loba li:

U na s o la tabe lla fil e a tt iv i (i- nod e a tt iv i) c on un nu m e ro d i en tr y pa ri a l nu m e ro d i fil e a tt iv i (ape rti an c he da p iù p ro c e ss i)

U na s o la tabe lla de i fil e a p e rt i, c on una en tr y pe r ogn i ape rtu ra d i fil e (po ss ib ili p iù en tr y re fe ren ti l o s te ss o fil e ) - un pun ta to re a l c o rr is ponden te i- nod e ; - un pun ta to re (I/ 0 po in te r) pe r le ope ra z ion i d i l e tt u ra e sc ritt u ra s u l fil e : pun ta a l b y te "c o rr en te " de l fil e a pa rti re da l qua le v e rr anno e ff e tt ua te le ope ra z ion i.

(16)

Unix: Gestione Files in C per UNIX - 31

A p e rt u ra d i un fil e

L ’ape rtu ra d i un fil e (sys te m c a ll

open()

) p ro v o c a :

• l’ a llo c a z ione d i un e le m en to (ind iv idua to da un fil e de sc rip to r) ne lla p rim a po s iz ione libe ra de lla T abe lla de i fil e ape rti de l p ro c e ss o

• l’i

n s e rim en to d i un nuo v o re c o rd ne lla T abe lla de i fil e ape rti d i s is te m a

• la

c op ia de l s uo i-node ne lla tabe lla de i fil e a tt iv i (s e il fil e non è g ià s ta to ape rto da un a ltr o p ro c e ss o )

Unix: Gestione Files in C per UNIX - 32

C ond iv is ion e d i fil e

a p e rt u re se p a ra te d i uno s te ss o fil e po rtano a c ond iv ide re una s o la en tr y de lla tabe lla deg li i -node a tt iv i, m a s i a v ranno d is tin te en tr y ne lla tabe lla de i fil e ape rti .

I/O pointer Spazio UtenteSpazio di sistema

i-node Tabelladei FileAttivi

Tabella dei File Apertidi Sistema fd

Tabella dei File Aperti del Processo Memoriadi Massa Dispositivi fisici

fd

I/O pointer Processo A

Processo B

(17)

Unix: Gestione Files in C per UNIX - 33

C ond iv is ion e d i fil e

C a s o d i p ro c e ss o p ro c e ss o pad re c he ap re un fil e p rim a d i c rea re un p ro c e ss o fig lio :

pad re e f ig lio c ond iv idono la en tr y ne lla tabe lla de i fil e ape rti , e an c he la c o rr is ponden te en tr y ne lla tabe lla deg li i - node a tt iv i

lo s tess o I/O po in te r;

Spazio Utente

fd

Tabella dei File Aperti del Processo fd Processo Padre

Processo Figlio

I/O pointer Spazio di sistema

i-node Tabelladei FileAttivi

Tabella dei File Aperti di Sistema Memoriadi Massa Dispositivi fisici

Riferimenti

Documenti correlati

Il primo avviamento da diritto all'estensione di garanzia completa di ulteriori 12 mesi rispetto alle condizioni generali di garanzia.. Il modulo è scaricabile dal

É vietata (ai sensi dell’art. 48, comma 9 del Codice) l’associazione in partecipazione sia durante la procedura di gara sia successivamente all'aggiudicazione. Salvo quanto disposto

Ad esempio, il sottotetto che è strutturalmente realizzato affinché possa accedervi solamente il proprietario dell’ultimo piano, non può rientrare tra le parti comuni in quanto, per

f) esperienza professionale specifica, relativa a servizi analoghi di consulenza e assistenza legale stragiudiziale oggetto del presente affidamento, svolta negli ultimi cinque anni,

Il Committente dovrà effettuare talune verifiche anche nei confronti delle imprese e degli autonomi coinvolti nei lavori soprattutto nei lavori più complessi o più rischiosi.

4/2017, hanno priorità nell'assegnazione nella misura del 20% delle unità abitative disponibili.

– Sharing of Computable Knowledge!, Proceedings of the 35th International Conference on Education and Research in Computer Aided Architectural Design in Europe.. Rome: eCAADe

Il disegno nella geometria, storia e costruzione dell’architettura.. Percorsi di ricerca tra scienza