[PLUTO-help] OT: cosa indica lo slash nei percorsi?

Sabatino Palladino sabatino.palladino a aliceposta.it
Lun 2 Mar 2009 12:40:19 CET


Alle 13:36, sabato 28 febbraio 2009, exameron ha scritto:
> avevo già provato a rispondere ma per qualche motivo il
> mio precedente tentativo non è andato a buon fine.
> comunque...
> ... 

Purtroppo nel rispondere alla tua lettera ho commesso un 
grave errore; ho inviato per sbaglio due copie della
stessa lettera, una alla mailing-list e l'altra alla 
casella postale personale di exameron. Sfortuna ha voluto
che questa settimana sono stato molto occupato per cui 
posso rispondere solo ora e solo ora mi sono accorto dell'
errore. Mi scuso per questo e per non aver replicato 
subito che non potevo rispondere.




Alle 13:36, sabato 28 febbraio 2009, exameron ha scritto:
> ...
> mi chiedevo se, in sede di "semantica dei percorsi", lo
> slash APPARTIENE alla directory (esempio 2: il nome
> directory termina con lo slash) o non ci ficca niente
> (esempio 1: lo slash è solo un escamotage per distinguere
> gli elementi che compongono il percorso), ma a quanto
> pare mi hai già risposto quando mi dici che...
> ...

La cosa mi lascia perplesso perché per rispondere alla 
domanda sono costretto a sceglier tra due alternative
entrambe indesiderabili.
A questo punto o faccio sfoggio di erudizione ed entro 
nei dettagli implementativi dei filesystem Unix, cosa 
abbastanza noiosa e che consuma molto tempo, oppure 
sono costretto a ripetere per la seconda volta un 
concetto semplicissimo: 

  La barra "/" è un delimitatore di campo, separa 
  le directory all'interno del percorso. Inoltre 
  ha una seconda funzione, quando compare come 
  carattere all'interno di un percorso, è il nome
  della directory radice ed indica che il percorso
  è un percorso assoluto e la ricerca del file
  deve iniziare dalla directory radice.

Inoltre il nome di un file non ha niente a che vedere 
con il file stesso che è rappresentato dal suo inode, 
che il tipo del file (se è una directory, un link 
simbolico, un dispositivo, un socket od altro) è 
contenuto all'interno dell'inode. 

Ben strano sarebbe se il tipo fosse determinato da una
semplice barra nel nome del file. 
Fai mente locale; in Unix l'estensione dei file non ha
nessun significato, .pdf, .jpeg, .mp3... sono solo delle
convenzioni, degli artifici mnemonici che servono a noi
(non al sistema operativo) per ricordarci cosa c'è nel 
file. Perchè la barra avrebbe un ruolo così speciale?




Alle 13:36, sabato 28 febbraio 2009, exameron ha scritto:
> ...
> # La differenza? Con la barra finale hai due accessi al
> # disco in più.
>
> ...cioè? mi spieghi meglio per favore? che cosa intendi
> per "due accessi al disco in più"?
> io finora non mi sono accolto di alcuna differenza, sia
> che si tratti di link del primo tipo - ...diciamo - che
> del secondo.


Ho già risposto; entro nei dettagli.

Quando apri un file non fai altro che invocare una chiamata
al sistema passando in una stringa il percorso del file che
vuoi aprire.

Quando vuoi aprire il file lavoro/tesi/capitolo.1.tex il 
filesystem:
 - vede che si tratta di un percorso relativo e recupera la
   directory corrente
 - accede all'inode della directory corrente,
 - legge la directory corrente e recupera il numero dell'
   inode della directory lavoro
 - accede all'inode della directory lavoro,
 - legge la directory lavoro e recupera il numero dell'inode
   della directory tesi
 - accede all'inode della directory tesi,
 - legge la directory tesi e recupera il numero dell'inode
   del file capitolo.1.tex
 - accede all'inode, apre il file  restituendo l'handle al
   file in modo che puoi usarlo.

Stessa cosa se vuoi eseguire il file /bin/ls; il filesysyem:
 - vede che il percorso inizia con la barra e capisce che si
   tratta di un percorso assoluto.
 - accede all'inode della directory radice,
 - legge la directory radice e recupera il numero dell'
   inode della directory bin
 - accede all'inode della directory bin,
 - legge la directory bin e recupera il numero dell'inode
   del file ls
 - accede all'inode, apre il file restituendo l'handle al
   file in modo che puoi usarlo.


Vediamo ora cosa succede se vuoi accedere alla directory
/home/utonto/documenti///lavoro/tesi
 - vede che il percorso inizia con la barra e capisce che si
   tratta di un percorso assoluto.
 - accede all'inode della directory radice
 - legge la directory radice e recupera il numero dell'
   inode della directory home
 - accede all'inode della directory home
 - legge la directory home e recupera il numero dell'
   inode della directory utonto
 - accede all'inode della directory utonto
 - legge la directory utonto e recupera il numero dell'
   inode della directory documenti
 - accede all'inode della directory documenti,

Ora il filesystem legge la stringa nulla come prossimo file
da processare ed interpreta la cosa come un sinonimo della
directory "." (che è la directory stessa) quindi:

 - legge la directory documeti e recupera il numero dell'
   inode della directory .
 - accede all'inode della directory .
 - legge la directory . e recupera il numero dell'
   inode della directory .
 - accede all'inode della directory .
 - legge la directory . e recupera il numero dell'
   inode della directory lavoro
 - accede all'inode della directory lavoro
 - legge la directory lavoro e recupera il numero dell'
   inode della directory tesi
 - accede all'inode della directory tesi...


Ora se scrivi "/home/utonto/documenti///lavoro/tesi/"
questo verrebbe interpretato come 
"/home/utonto/documenti/././lavoro/tesi/."
ed avresti ancora l'ulteriore passaggio per processare
la directory "." (che poi è la directory "tesi") con 
due accessi al disco in più, 

Questo potrebbe essere inutile ma potrebbe servire per 
essere sicuri che stai processando una directory in alcuni
casi particolari con alcuni programmi che lo richiedono.


Ci sentiamo in lista.


-- 
Sabatino Palladino
......
Non voglio i mille baci che diede Lesbia a Catullo,
pochi baci vuole chi riesce a contarli.
				M. Valerio Marziale
				  (versione libera)



More information about the pluto-help mailing list